如何在matplotlib中制作空白子图?


82

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

安排如下所示:

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

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

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

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

Answers:


138

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

import matplotlib.pyplot as plt

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

plt.show()

结果如下图:

3x2图形网格的图像,右下单元格中未渲染任何图形

或者,请参见对问题的公认答案,即在matplotlib图中隐藏轴文本,以获取保留轴但隐藏所有轴装饰(例如刻度线和标签)的方式。


谢谢-实际上,这更接近我的原始问题。我已经接受了另一个答案,并修改了我的代码以使用它,但是两种方法都很棒。
mishaF 2012年

太好了,因为add_subplot()杂物少了,这确实很好。
moooeeeep 2012年

这太神奇了!
FaCoffee

这确实没有显示任何情节,并且可以说这是一个空白情节。我一直在寻找没有数据的图,以明确显示没有数据。对这个答案进行任何简单的修改,是哪个?
Zelphir Kaltstahl '17

@Zelphir我不确定您想要什么:其他五幅图是没有数据的空图,因此我不确定您想要什么。另外,这是一个新问题。将来,请将此问题作为新问题提出,而不要评论旧答案。
克里斯(Chris)

26

一个很大的改进插曲接口已经被添加到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()

在此处输入图片说明


哇-这是一个不错的改进。简单得多!谢谢@挂钩!
mishaF

@Hooked,最后一个空格非常适合添加图例。您知道在那里设置图例的任何方法吗?
Stefano '18

@Stefano肯定有这样做的方法-但这最好是作为一个新问题提出,您甚至可以在您的问题中链接这个答案(欢迎来到StackOverflow btw!)
钩住了

6

也可以使用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)

对于原始轴和扩展GeoAxes,您的答案都非常好!
Fei Yao

1

在需要时可以选择创建子图吗?

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

我不这么认为,因为我还需要做其他格式化工作,但为了简洁起见,我没有将其包括在原始问题中。其中之一是plt.subplots_adjust(wspace = 0,hspace = 0)。我不确定事实之后是否会奏效。
mishaF 2012年

@mishaF:您可以使用此方法执行subplots_adjust()。看到我的编辑。
moooeeeep 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.