如何在我的情节周围添加更多空白?

时间:2013-01-13 18:57:48

标签: python matplotlib

我有一个图包含两行和一列的两个子图,如下所示:

fig, (ax1, ax2) = subplots(
    nrows=2,
    ncols=1,
)

这两个子图是饼图,因此我希望它们的轴是方形的。浏览API后,以下内容应该是调整每个子图的轴的正确方法:

ax1.axis([0, 8, 0, 8])
ax2.axis([0, 8, 0, 8])

然后我调整整个数字的大小。由于每个子图的宽度为8英寸,我将图的宽度设置为8英寸,图的高度为2 * 8 = 16英寸:

fig.set_size_inches(8, 16)

这些设置可以生成格式正确的饼图。但是,当我将图形保存为PDF文件时,图形右边缘的一个饼楔的标签会被切掉。保存的文件中的图形比预览窗口中的图形更窄。这就是为什么我想沿x轴加宽数字但保留子图的轴。如果我只是试着通过这样做来扩大数字:

fig.set_size_inches(12, 16)

现在这个数字变得更宽,但不幸的是,这两个饼图也是如此。根据我的理解,axis()调用应该保留子图的维度,但它们不会。在阅读并尝试了很多关于自动缩放,xlim,ylim等之后,我更加困惑,没有任何作用。

我只想通过保留子图的尺寸来扩大图形,以便沿x轴有更多的空白,并且可以显示标签而不切断它们。我该怎么做?

1 个答案:

答案 0 :(得分:3)

我建议使用fig.tight_layout。您有大约两条路径,可以调整pad

fig.tight_layout(pad=2)

,同时从图的边缘移动所有边缘或

fig.tight_layout(rect=[0,0,.8,1]) 

将调整子图被挤入的框的大小(以图的分数为单位)。这仅适用于较新的版本(1.2或更高版本)。

您也可以手动创建子图(这非常烦人,但可以完全控制)或使用gridspec。布局出子图似乎是一个问题,matplotlib有一些大量的解决方法。

令人讨厌的方法是

fig = plt.figure()


top_offset = .07
left_offset = .15
right_offset = .2
bottom_offset = .13
hgap = .1
ax_width = 1-left_offset - right_offset
ax_height = (1-top_offset - bottom_offset - hgap)/2

ax1 = fig.add_axes([left_offset, bottom_offset + ax_height + hgap, ax_width, ax_height])
ax2 = fig.add_axes([left_offset, bottom_offset, ax_width, ax_height])

将5个参数调整为可以使你的数字看起来很好。