matplotlib中的精确图形大小,带有标题,轴标签

时间:2012-01-08 05:31:52

标签: python matplotlib

以前曾提出过类似的问题,但我的所有搜索结果都没有 解决我的问题。请参考以下示例代码:

from matplotlib.pyplot import *
fig = figure(1, figsize=(3.25, 3))
plot([0,1,5,2,9])
title('title')
xlabel('xAxis')
ylabel('yAxis')
fig.savefig('test.png',dpi=600)

得到的数字是2040x1890像素,或3.4“x3.15”,以及x标签 被切断了。在图像编辑器中查看PNG文件,看起来如此 轴和刻度标签符合所需的尺寸。我试过了 与输出尺寸和要求尺寸的差异以及反馈 在(3.25 - (3.4-3.25)= 3.10,但matplotlib似乎添加任意 缓冲区,它仍然没有达到所需的大小。怎么一个 制作一个理想大小的整体数字?

2 个答案:

答案 0 :(得分:10)

与大卫罗宾逊的评论一致,这里产生的数字是由photoshop测量的3.25 x 3英寸,尽管xlabel确实显示截止(蟒蛇2.6中的mpl 1.1.0 64位,win7)

解决此问题的解决方案是使用subplot_adjust

手动调整边距
from matplotlib.pyplot import *
fig = figure(1, figsize=(3.25, 3))
plot([0, 1, 5, 2, 9])
title('title')
xlabel('xAxis')
ylabel('yAxis')
subplots_adjust(bottom=0.14)   # <--
fig.savefig('test.png', dpi=600) 

这些边距的默认值在matploblibrc文件中设置,您可以永久修改它。在我的情况下,底部边距的默认值是0.10。

如果您的图形尺寸错误或正确,如我的情况,您可以使用subplot_adjust为标签提供足够的空间。然后,如果需要,您可以计算校正以获得您想要的实际图片或图形尺寸。

保存的数字的最终视图取决于该数字的大小。如果你show()你的数字,并从matplotlib视图框保存它,你会得到图像中的标签截止。但是,如果手动增加图像的大小,您将看到标签出现,如果保存,则它也会出现在保存的图像中。让我们说这是所见即所得。你的身材尺寸非常小,这会让你的标签被剪掉。因此,另一种方法是使用更低的dpi来制作更大的数字以保持整体尺寸。这也有效:

from matplotlib.pyplot import *
fig = figure(1, figsize=(6.5, 6))   # <---
plot([0, 1, 5, 2, 9])
title('title')
xlabel('xAxis')
ylabel('yAxis')
fig.savefig('test.png', dpi=300)    # <---

在任何情况下,我都认为这是一个matplolib错误,因为你可以期望在绘图和保存之后有一个未切割的数字。

答案 1 :(得分:8)

matplotlib 1.1.1已添加figure.tight_layout()doc),可以为您执行此操作。