如何防止Matplotlib剪掉我的轴标签?

时间:2014-04-02 10:39:27

标签: python matplotlib axes axis-labels

我正在为一篇科学论文准备一些情节,为了符合页面限制,这篇论文需要广泛而简短。但是,当我将它们保存为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文件如下所示: enter image description here

如何更改pdf文件的边界框?理想情况下,我想要一个“做得恰到好处”的解决方案,即自动调整大小,使一切都整齐,包括摆脱左右两侧不必要的空间 - 但我很匆忙,所以我会解决任何方式更改边界框,我会猜测数字,直到它看起来正确,如果我必须。

3 个答案:

答案 0 :(得分:8)

在谷歌搜索后,我找到了答案:您可以bbox_inches='tight'savefig命令,它会自动将边界框调整为内容大小:

%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')

enter image description here

我想这些是一些紧凑的英寸。

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

答案 1 :(得分:4)

您可以使用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的工作方式相同)。

Example plot

答案 2 :(得分:4)

如果你正在准备科学论文的情节,我建议做剪辑'独自一人 使用

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

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

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

这是唯一的选项,只要您必须垂直或水平堆叠两个数字(例如subfigure之类的包),因为tight_layout不能保证两个数字中的相同边距,并且该轴将导致错位。

对于使用matplotlib进行发布,这是一个很好的link,例如,如何设置图形宽度以匹配日记列宽度。