matplotlib 准确地计算出将被保存的数字

mwecs4sa  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(111)

我现在经常使用ipython-notebook进行数值分析和数据绘图。在准备出版质量图的过程中,有很多调整以获得正确的布局,但是我不能让ipython/matplotlib显示我将在浏览器中保存的内容。使这个过程比它应该的更痛苦,因为我必须不断打开新的输出文件来检查它。
有没有办法让内联显示的图像与保存的图像相同?
示例如下,为清晰起见,facecolor ='gray':

import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

fig = plt.figure(figsize=(6,4),facecolor='gray')
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
x = np.linspace(0,2*np.pi,1000)
y = np.sin(x)
ax.plot(x,y,label=r'$\sin(x)$')
ax.set_xlim(0,2*np.pi)
ax.set_ylim(-1.2,1.2)
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y$')
ax.legend(loc='upper right', frameon=False)
fig.savefig('mypath.png',dpi=300, facecolor='gray')
plt.show()

注意这里我已经明确选择了我的轴尺寸,以便它们与结果图像的两侧等距。这在保存的图像中得到了尊重,但在笔记本中显示的图像中被忽略了:
笔记本显示图像:

Savefig图像:

2skhul33

2skhul331#

正如@andrew所指出的,ipython的魔法在默认情况下强制执行bbox_inches='tight'。这可以使用其他魔法覆盖,如ipython documentation中所解释的:

%matplotlib inline
%config InlineBackend.print_figure_kwargs = {'bbox_inches':None}

产生与savefig产生的内联图像相同的内联图像。

wvyml7n5

wvyml7n52#

这种行为是由于魔术%matplotlib inline在内联呈现时默认使用bbox_inches='tight'
我知道你问过关于改变plt.show()的行为,但是,你也可以改变savefig()的行为,使用与notbeook相同的设置。

fig.savefig('mypath.png',dpi=300, facecolor='gray',  bbox_inches='tight')

新的“savefig”图像:

相关问题