从savefig()上的matplotlib图中剪切的文本或图例

MPa*_*MPa 8 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)
Run Code Online (Sandbox Code Playgroud)

显示的输出就像我想要的那样: 显示,这就是我想要的

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

plt.savefig(r'C:\mypy\test_graph.png', ext='png');
Run Code Online (Sandbox Code Playgroud)

不是我想要的,而是得到了什么

使用plt.tightlayout(),如建议在这里使问题变得更糟.

我该如何最好地解决这个问题?

Imp*_*est 16

Jupyter笔记本显示该图的已保存的png版本.在此保存期间,使用该选项%matplotlib inline.

为了复制您在jupyter输出中看到的数字,您还需要使用此选项.

plt.savefig("output.png", bbox_inches="tight")
Run Code Online (Sandbox Code Playgroud)

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

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

这可以用例如

plt.subplots_adjust(right=0.7)
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述


MPa*_*MPa 7

添加bbox_inches="tight"到 savefig **kwargs 将做到这一点:

plt.savefig(r'C:\mypy\test_graph.png', ext='png', bbox_inches="tight")  
Run Code Online (Sandbox Code Playgroud)

保存的文件: 在此处输入图片说明