我正在为一篇科学论文准备一些情节,为了符合页面限制,这篇论文需要广泛而简短。但是,当我将它们保存为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文件的边界框?理想情况下,我想要一个“做得恰到好处”的解决方案,即自动调整大小,使一切都整齐,包括摆脱左右两侧不必要的空间 - 但我很匆忙,所以我会解决任何方式更改边界框,我会猜测数字,直到它看起来正确,如果我必须。
答案 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')
我想这些是一些紧凑的英寸。
请注意,这与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的工作方式相同)。
答案 2 :(得分:4)
如果你正在准备科学论文的情节,我建议做剪辑'独自一人 使用
plt.subplots_adjust(left,right,bottom,top,..)
创建图形之后和保存之前。如果您从ipython控制台运行,您也可以在生成数字后调用subplots_adjust
,并通过反复试验来调整边距。一些后端(我认为至少Qt后端)也公开了这个功能的GUI。
手动执行此操作需要时间,但大多数时候都会提供更精确的结果,尤其是根据我的经验使用Latex渲染。
这是唯一的选项,只要您必须垂直或水平堆叠两个数字(例如subfigure
之类的包),因为tight_layout
不能保证两个数字中的相同边距,并且该轴将导致错位。
对于使用matplotlib进行发布,这是一个很好的link,例如,如何设置图形宽度以匹配日记列宽度。