假设我想绘制一个非常简单的图形,其中水平布置了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)
但是,当我尝试导出图形时,右边的文本会被删除:
plt.savefig(r'C:\mypy\test_graph.png', ext='png');
根据建议使用plt.tightlayout()
here会使问题变得更糟。
我怎样才能最好地解决这个问题?
答案 0 :(得分:9)
Jupyter笔记本默认配置为使用其"内联"后端(%matplotlib inline
)。它显示该图的已保存的png版本。在此保存期间,使用选项bbox_inches="tight"
。
为了复制你在jupyter输出中看到的数字,你也需要使用这个选项。
plt.savefig("output.png", bbox_inches="tight")
此命令的作用是扩展或缩小已保存图形的区域以包含其中的所有艺术家。
或者,您可以缩小图形的内容,以便有足够的空间使文本适合原始图形。
这可以通过例如
来完成plt.subplots_adjust(right=0.7)
这意味着最右边的轴停在图形宽度的70%处。
答案 1 :(得分:2)