从savefig()

时间:2017-06-20 00:51:48

标签: matplotlib

假设我想绘制一个非常简单的图形,其中水平布置了2个子图,我想在第二个子图的右侧添加一些文本。我在Jupyter Notebook工作,但这不应该改变任何东西:

import matplotlib.pyplot as plt
%matplotlib inline

plt.figure(figsize=(8, 3))

ax1 = plt.subplot(121)
ax1.plot(x,y1)

ax2 = plt.subplot(122)
ax2.plot(x,y2)
ax2.text(1.05,0.7, 'Some text here', horizontalalignment='left', transform=ax2.transAxes)

显示的输出就像我想要的那样: Display, which is what I want

但是,当我尝试导出图形时,右边的文本会被删除:

plt.savefig(r'C:\mypy\test_graph.png', ext='png');

Not what I want, but what gets saved

根据建议使用plt.tightlayout() here会使问题变得更糟。

我怎样才能最好地解决这个问题?

2 个答案:

答案 0 :(得分:9)

Jupyter笔记本默认配置为使用其"内联"后端(%matplotlib inline)。它显示该图的已保存的png版本。在此保存期间,使用选项bbox_inches="tight"

为了复制你在jupyter输出中看到的数字,你也需要使用这个选项。

plt.savefig("output.png", bbox_inches="tight")

此命令的作用是扩展或缩小已保存图形的区域以包含其中的所有艺术家。

或者,您可以缩小图形的内容,以便有足够的空间使文本适合原始图形。

这可以通过例如

来完成
plt.subplots_adjust(right=0.7)

这意味着最右边的轴停在图形宽度的70%处。

enter image description here

答案 1 :(得分:2)

bbox_inches="tight"添加到savefig ** kwargs将执行此操作:

plt.savefig(r'C:\mypy\test_graph.png', ext='png', bbox_inches="tight")  

保存的文件: enter image description here