105

我正在 matplotlib 中制作一组子图(例如 3 x 2),但我的数据集少于 6 个。如何使剩余的子图为空白?

安排如下:

+----+----+
| 0,0| 0,1|
+----+----+
| 1,0| 1,1|
+----+----+
| 2,0| 2,1|
+----+----+

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

cfig,ax = plt.subplots(3,2)

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

4

5 回答 5

179

您始终可以隐藏不需要的轴。例如,以下代码完全关闭第 6 个轴:

import matplotlib.pyplot as plt

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

plt.show()

结果如下图:

3x2 网格图形的图像,右下方单元格中未呈现图形

或者,请参阅问题Hiding axis text in matplotlib plots的公认答案,以了解保留轴但隐藏所有轴装饰(例如刻度线和标签)的方法。

于 2012-04-05T21:03:32.777 回答
28

自从第一次提出这个问题以来,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()

在此处输入图像描述

于 2013-01-15T16:12:45.847 回答
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)
于 2017-04-10T20:19:37.307 回答
2

是否可以在需要时创建子图?

import matplotlib
matplotlib.use("pdf")
import matplotlib.pyplot as plt

plt.figure()
plt.gcf().add_subplot(421)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(422)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(423)
plt.fill([0,0,1,1],[0,1,1,0])
plt.suptitle("Figure Title")
plt.gcf().subplots_adjust(hspace=0.5,wspace=0.5)
plt.savefig("outfig")
于 2012-04-05T20:42:27.140 回答
0

要删除位于 (2,1) 的绘图,您可以使用

import matplotlib.pyplot as plt
cfig,ax = plt.subplots(3,2)
cfig.delaxes(ax.flatten()[5])

于 2021-08-27T22:14:37.983 回答