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

我在 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的空间中有一组带有刻度和标签的默认轴。如何以编程方式呈现该空间为空并且没有轴?

92915 次浏览

当你需要子情节的时候,是否可以选择创建子情节?

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")

你总是可以把你不需要的斧头藏起来。例如,下面的代码完全关闭了第六个轴:

import matplotlib.pyplot as plt


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


plt.show()

结果如下:

An image of a 3x2 grid of graphs, with no graph rendered in the bottom right cell

或者,查看问题 在 matplotlib 图中隐藏轴文本的公认答案,了解保留轴但隐藏所有轴的修饰(例如刻度标记和标签)的方法。

自从首次提出这个问题以来,一个 很多改进的 子图接口子图接口已经被添加到 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()

enter image description here

It's also possible to hide a subplot using the Axes.set_visible() method.

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)

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

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