如何在matplotlib中创建一个空白子图?

mis*_*haF 70 python axes matplotlib subplot

我在matplotlib中制作了一组子图(例如,3 x 2),但我的数据集少于6个.如何将剩余的子图留空?

安排如下:

+----+----+
| 0,0| 0,1|
+----+----+
| 1,0| 1,1|
+----+----+
| 2,0| 2,1|
+----+----+
Run Code Online (Sandbox Code Playgroud)

这可能会持续几页,但在最后一页上,例如,2,1框中的5个数据集将为空.但是,我已将该数字声明为:

cfig,ax = plt.subplots(3,2)
Run Code Online (Sandbox Code Playgroud)

因此,在子图2,1的空间中,存在一组带有刻度和标签的默认轴.如何以编程方式将该空间渲染为空白且没有轴?

Chr*_*ris 114

您可以随时隐藏您不需要的轴.例如,以下代码完全转动第6轴:

import matplotlib.pyplot as plt

hf, ha = plt.subplots(3,2)
ha[-1, -1].axis('off')

plt.show()
Run Code Online (Sandbox Code Playgroud)

并得出如下图:

在此输入图像描述

或者,请参阅matplotlib图中隐藏轴文本的问题的接受答案,以获得保持轴但隐藏所有轴装饰(例如刻度线和标签)的方法.


Hoo*_*ked 25

自问这个问题以来,matplotlib已经添加了一个改进得很好的子图界面.在这里,您可以精确创建所需的子图,而无需隐藏附加内容.此外,子图可以跨越其他行或列.

import pylab as plt

ax1 = plt.subplot2grid((3,2),(0, 0))
ax2 = plt.subplot2grid((3,2),(0, 1))
ax3 = plt.subplot2grid((3,2),(1, 0))
ax4 = plt.subplot2grid((3,2),(1, 1))
ax5 = plt.subplot2grid((3,2),(2, 0))

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 8

也可以使用 Axes.set_visible() 方法隐藏子图。

import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure()
data = pd.read_csv('sampledata.csv')

for i in range(0,6):
    ax = fig.add_subplot(3,2,i+1)
    ax.plot(range(1,6), data[i])
    if i == 5:
        ax.set_visible(False)
Run Code Online (Sandbox Code Playgroud)