在我当前的iPython中,matplotlib图是内联显示的。我想要一种显示具有特定像素大小的图像的方法,因为我通常只处理像素,并且不打印任何内容。

我的屏幕PPI是208,因此我运行了以下2段代码:

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 x 300像素。

对于两个函数都使用相同的DPI,为什么在iPython笔记本中内联渲染的图像是如此之小,而我保存的图像却达到了我想要的正确分辨率?

请注意,我在Virtualbox(也没有头)中运行iPython,我不确定这是否会引起任何差异。

经过几次尝试和错误,为了获得正确的尺寸以进行内联渲染,数字dpi需要为58。但是即使如此,内联生成的图像也与我指定的像素数不完全匹配。始终为+-10到20像素。

最佳答案

这可能是由于默认情况下%matplotlib inlinebbox_inches='tight'传递给plt.figure(...)的事实。
尝试以下方法

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

之前
python - IPython和内联Matplotlib图大小-LMLPHP

之后
python - IPython和内联Matplotlib图大小-LMLPHP

10-06 05:22
查看更多