我希望如下代码可以调整子图的大小,使得生成的PDF文档宽度为5英寸,高度为8英寸。但是无论我在
figsize
里输入什么,生成的文件总是8英寸宽,6英寸高。我做错了什么?import matplotlib.pyplot as plt
import matplotlib.gridspec as gs
fig = plt.Figure(figsize=(5,8))
fig.set_canvas(plt.gcf().canvas)
gs1 = gs.GridSpec(3,2)
gs1.update(wspace=0.4,hspace=0.4)
ax1 = plt.subplot(gs1[0,0])
ax2 = plt.subplot(gs1[0,1])
ax3 = plt.subplot(gs1[1,0])
ax4 = plt.subplot(gs1[1,1])
ax5 = plt.subplot(gs1[2,:])
ax1.plot([1,2,3],[4,5,6], 'k-')
fig.savefig("foo.pdf", format='pdf')
抱歉——编辑添加一句话,我也尝试过fig.set_size_inches((5,8))
,但似乎没有任何效果。
fig = plt.figure()
- tacaswellplt.figure
和plt.Figure
之间有所不同。plt.Figure
发生在pyplot命名空间内,但它是“原始”的类。你当然可以单独初始化它(你还需要初始化一个FigureCanvas
才能让任何东西工作),但图像不会被添加到pyplot状态机中。plt.figure
是一个创建链接Figure
和FigureCanvas
实例并将它们添加到pyplot图形管理器的工厂函数。如果你想使用plt.*
方法,你必须使用plt.figure
。 - Joe Kingtonfig = plt.Figure(...)
创建了一个新的图形实例,但它没有添加到 pyplot 状态机中。因此,当您调用plt.subplot
时,没有“当前”图形,因此在幕后创建了 另一个 图形。(这是使用 figure 方法直接的另一个原因:例如fig.add_subplot
而不是plt.subplot
) - Joe Kingtonset_canvas
内调用plt.gcf()
”而不是“当你调用plt.subplot
”时。显然,两个图形对象可以共享同一个画布...或者至少在这里是这样。 - Joe Kington