【问题标题】:Matplotlib and Ipython-notebook: Displaying exactly the figure that will be savedMatplotlib 和 Ipython-notebook:准确显示将要保存的图形
【发布时间】:2016-10-18 07:09:16
【问题描述】:

我现在经常使用 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()

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

笔记本显示图片:

保存图:

【问题讨论】:

  • 好的,写完这篇文章让我感到震惊,我可以使用IPython.display.Image 作为一种解决方法来保存然后显示。但是,我很想知道是否有一个答案可以让我真正控制plot.show() 的行为

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    我知道您询问过更改 plt.show() 的行为,但您也可以更改 savefig() 的行为以使用与 notbeook 相同的设置。

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

    新的“savefig”图片:

    【讨论】:

    • 感谢您指出这是 ipython 魔术设置 bbox_inches='tight'。不幸的是,对我的输出图做同样的事情不是一个选项,因为这意味着我的输出不能保证是我想要的大小,但它确实引导了 ipython 文档中的答案。
    • 我尝试在运行内联魔法后将rcParams 改回默认值,但它仍然以紧凑的布局呈现。如果您找到解决方案,请在此处发布。这似乎是一个悬而未决的问题。
    • 是的,内联显示魔法似乎有一些自己的默认值,不一定要遵循 rcparams。 (大概是缓存所有 plt.savefig 参数的值,因此在每次调用时都会覆盖 rcparams 中的任何内容。)我发布了一个带有相关 ipython 文档链接的答案。
    猜你喜欢
    • 2015-08-02
    • 1970-01-01
    • 2015-05-06
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2020-05-10
    • 2019-04-26
    相关资源
    最近更新 更多