【问题标题】:How to prevent Matplotlib from clipping away my axis labels?如何防止 Matplotlib 剪掉我的轴标签?
【发布时间】:2014-05-13 13:57:41
【问题描述】:

我正在为一篇科学论文准备一些图,这些图需要宽而短才能符合页数限制。但是,当我将它们保存为 pdf 时,缺少 x 轴标签,因为(我认为)它们在边界框之外。

将以下内容放入 iPython 笔记本会重现该问题。

%pylab inline
pylab.rcParams['figure.figsize'] = (8.0, 2.0)
plot([1,5,2,4,6,2,1])
xlabel("$x$")
ylabel("$y$")
savefig("test.pdf")

生成的 pdf 文件如下所示:

如何更改 pdf 文件的边界框?理想情况下,我想要一个“正确执行”的解决方案,即自动调整大小以使所有内容都整齐排列,包括消除左右两侧不必要的空间 - 但我很着急,所以我会满足于任何改变边界框的方法,如果必须的话,我会猜测数字直到它看起来正确。

【问题讨论】:

    标签: python matplotlib axes axis-labels


    【解决方案1】:

    在google了一下,找到了答案:你可以给savefig命令bbox_inches='tight',它会自动调整边界框到内容的大小:

    %pylab inline
    pylab.rcParams['figure.figsize'] = (8.0, 2.0)
    plot([1,5,2,4,6,2,1])
    xlabel("$x$")
    ylabel("$y$")
    savefig("test.pdf",bbox_inches='tight')
    

    我猜那是一些紧的英寸。

    请注意,这与 Ffisegydd 的答案略有不同,因为它将边界框调整为绘图,而不是更改绘图以适应边界框。 (但两者都适合我的目的。)

    【讨论】:

      【解决方案2】:

      您可以使用plt.tight_layout() 让 matplotlib 调整您的绘图布局。 tight_layout() 会自动调整尺寸,也可以在你有(例如)重叠标签/刻度/等时使用。

      %pylab inline
      
      pylab.rcParams['figure.figsize'] = (8.0, 2.0)
      
      plot([1,5,2,4,6,2,1])
      
      xlabel("$x$")
      ylabel("$y$")
      
      tight_layout()
      
      savefig("test.pdf")
      

      这是输出的 .png(无法将 pdf 上传到 SO,但我已经检查过了,它的工作方式与 pdf 相同)。

      【讨论】:

      • 我接受这一点,但任何未来的访问者也可能对我自己的答案感兴趣,它会调整边界框以适应情节,而不是相反。
      【解决方案3】:

      如果您正在为科学论文准备情节,我建议您自己进行“剪辑”, 使用

      plt.subplots_adjust(left,right,bottom,top,..)
      

      在创建图窗之后和保存之前。如果您从 ipython 控制台运行,您还可以在生成图形后调用 subplots_adjust,并通过反复试验调整边距。一些后端(我认为至少是 Qt 后端)也为此功能公开了一个 GUI。

      手动执行此操作需要时间,但大多数时候可以提供更精确的结果,尤其是根据我的经验使用 Latex 渲染。

      当您必须垂直或水平堆叠两个图形时,这是唯一的选择(例如,使用像 subfigure 这样的包),因为 tight_layout 不能保证两个图形中的边距相同,并且轴将导致在论文中未对齐。

      这是一个很好的 link@ 使用 matplotlib 进行出版物,包括例如如何设置图形宽度以匹配期刊列宽。

      【讨论】:

      • 谢谢,这个链接很有帮助。
      猜你喜欢
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 2017-07-20
      • 1970-01-01
      • 2017-06-03
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多