IPython和Inline Matplotlib图大小

时间:2016-03-08 10:47:26

标签: python matplotlib ipython jupyter-notebook

在我目前的iPython中,matplotlib图是以内联方式显示的。我想要一种显示具有特定像素大小的图像的方法,因为我通常只使用像素而不打印任何东西。

我的屏幕PPI是208,所以我运行了这两段代码:

plt.figure(figsize=(2000/float(208), 1000/float(208)), dpi=208)
# other code here...
plt.savefig('my_fig.png', dpi=208)

我感到困惑的是:当我检查my_fig.png时,它实际上是2000像素乘1000像素,这就是我想要的。另外,根据https://stackoverflow.com/a/7912007/582917,用于渲染到显示设备和渲染文件的DPI设置具有不同的默认值。这就是我必须在dpi=208函数中添加plt.savefig的原因。

然而,在浏览器中的iPython笔记本上呈现的图像要小得多。使用我的浏览器标尺,它大约是600乘300像素。

对两个函数使用相同的DPI,为什么iPython笔记本中的内嵌渲染图像太小,而我保存的图像处于我想要的正确分辨率?

请注意,我在Virtualbox中运行iPython(也是无头的),我不确定这是否会导致任何差异。

经过一些试验和错误后,为了获得内联渲染的正确尺寸,图形dpi需要为58.但即便如此,内联生成的图像也与我指定的像素数完全匹配。它总是+ - 10到20像素。

1 个答案:

答案 0 :(得分:0)

这可能是因为默认情况下%matplotlib inline会将bbox_inches='tight'传递给plt.figure(...)。 请尝试以下方法,

致电%matplotlib inline后,请执行此操作 %config InlineBackend.print_figure_kwargs = {'bbox_inches':None} 然后创建你的情节。这是它为我做的:

<强>之前 Before

<强>后 After