Matplotlib 和 Ipython-notebook:准确显示将要保存的图形
Matplotlib and Ipython-notebook: Displaying exactly the figure that will be saved
我目前经常使用 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()
注意这里我已经明确选择了我的轴尺寸,以便它们与结果图像的两侧等距。这在保存的图像中得到尊重,但在笔记本中显示的图像中被忽略:
笔记本显示图片:
保存无花果图像:
该行为是由于魔法 %matplotlib inline
默认使用
bbox_inches='tight'
内联渲染时。
我知道您问过关于更改 plt.show()
的行为,但您也可以更改 savefig()
的行为以使用与 notbeook 相同的设置。
fig.savefig('mypath.png',dpi=300, facecolor='gray', bbox_inches='tight')
新 'savefig' 图片:
如@andrew 所述,ipython 魔法默认强制执行 bbox_inches='tight'
。这可以使用其他魔法覆盖,如 ipython documentation:
中所述
%matplotlib inline
%config InlineBackend.print_figure_kwargs = {'bbox_inches':None}
生成与 savefig 生成的相同的内联图像。
我目前经常使用 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()
注意这里我已经明确选择了我的轴尺寸,以便它们与结果图像的两侧等距。这在保存的图像中得到尊重,但在笔记本中显示的图像中被忽略:
笔记本显示图片:
保存无花果图像:
该行为是由于魔法 %matplotlib inline
默认使用
bbox_inches='tight'
内联渲染时。
我知道您问过关于更改 plt.show()
的行为,但您也可以更改 savefig()
的行为以使用与 notbeook 相同的设置。
fig.savefig('mypath.png',dpi=300, facecolor='gray', bbox_inches='tight')
新 'savefig' 图片:
如@andrew 所述,ipython 魔法默认强制执行 bbox_inches='tight'
。这可以使用其他魔法覆盖,如 ipython documentation:
%matplotlib inline
%config InlineBackend.print_figure_kwargs = {'bbox_inches':None}
生成与 savefig 生成的相同的内联图像。