Matplotlib和Ipython-notebook:准确显示将保存的数字

时间:2016-06-16 16:31:23

标签: python matplotlib ipython ipython-notebook jupyter-notebook

我目前正在使用ipython-notebook进行数值分析和数据绘图。在准备出版质量图的过程中,有很多调整来使布局恰到好处,但是我无法让ipython / matplotlib向我展示我将在浏览器中保存的内容。让这个过程比它应该更痛苦,因为我必须继续打开新的输出文件来检查它。

有没有办法让内联显示的图像与保存的图像相同?

示例如下,facecolor ='grey'为清晰起见:

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()

请注意,我明确选择了我的轴尺寸,使它们与所得图像的两边等距。这在保存的图像中受到尊重,但在笔记本中显示的图像中被忽略:

笔记本显示图片:

Notebook displayed image

Savefig image:

enter image description here

2 个答案:

答案 0 :(得分:5)

如@andrew所述,默认情况下,ipython魔法会强制执行bbox_inches='tight'。这可以使用其他魔法覆盖,如ipython documentation

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

生成与savefig生成的内嵌图像相同的内嵌图像。

答案 1 :(得分:1)

这种行为是由于魔术%matplotlib inline默认使用 在内联渲染时bbox_inches='tight'

我知道您曾询问有关更改plt.show()的行为的问题,但是,您可以更改savefig()的行为以使用与未成功相同的设置。

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

新的'savefig'图片:

enter image description here