【问题标题】:Exact figure size in matplotlib with title, axis labelsmatplotlib 中带有标题、轴标签的确切图形大小
【发布时间】:2012-02-05 05:34:40
【问题描述】:

以前有人问过类似的问题,但我的所有搜索结果都没有 解决我的问题。以下面的示例代码为例:

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-label 被切断。在图像编辑器中查看 PNG 文件,似乎 轴和刻度标签适合所需的大小。我试过服用 与输出尺寸和请求尺寸的差异以及反馈 在 (3.25 - (3.4-3.25) = 3.10,但 matplotlib 似乎添加了任意 缓冲区,它仍然没有达到所需的大小。一个如何 制作一个符合所需尺寸的整体图?

【问题讨论】:

  • 我无法重现这一点 - 当我在我的机器上运行此代码并在预览中打开 PNG 时,我得到一个 1950x1800 像素或正好 3.25 x 3 英寸的图形。您使用的是什么版本的 matplotlib? ETA:虽然我确实看到 xlabel 被切断了。
  • 我的 matplotlib 版本是 1.0.1 - 我会尝试更新到 1.1.0。有点奇怪: 在 [228]: fig = figure(3, figsize=(3.15, 3.15)) 在 [229]: fig.savefig('test0.png',dpi=600) 在 [230] : fig.get_size_inches() Out[230]: array([ 3.3, 3.3])
  • 上述行为在 IPython 0.11 上的 mpl 1.1.0、Win7 x64 上的 Python 2.7.2(x32 版本)中持续存在。

标签: python matplotlib


【解决方案1】:

与 David Robinson 的评论一致,此处生成的数字是 3.25 x 3 英寸,由 Photoshop 测量,尽管 xlabel 确实显示截止(python 2.6 64 位中的 mpl 1.1.0,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 错误,因为您可能期望在绘图和保存后有一个未切割的图形。

【讨论】:

    【解决方案2】:

    matplotlib 1.1.1 已添加 figure.tight_layout() (doc) 将为您完成此操作。

    【讨论】:

    • 他们将tight_layout() 移到文档的不同页面中,因为它不再是图形属性。你可以找到它here
    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 2015-08-12
    • 2015-02-05
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多