内联图像质量低

jim*_*ron 31 matplotlib scikit-image ipython-notebook

我正在加载带有scikit-image的TIF文件,并在ipython笔记本(2.2.0版)中内联显示.但是,这样可以在首次显示时图像非常小,当我使用图像右下角的可拖动手柄调整图像时,它只是重新调整图像,同时保留原始图像的分辨率,因此放大时图像非常模糊.这基本上就像ipython正在将我的图像转换为动态缩略图一样.

我也尝试过使用matplotlib plt.imshow(),它具有完全相同的结果.我正在用笔记本开始ipython notebook --pylab inline.

from skimage import io
import matplotlib.pyplot as plt
image_stack = io.MultiImage("my_image.tif")
image = image_stack[0]  # it's a multi-page TIF, this gets the first image in the stack

io.imshow(image)  # or plt.imshow(image)
io.show()  # or plt.show()
Run Code Online (Sandbox Code Playgroud)

Fra*_*ues 31

要在笔记本上更改"%matplotlib inline"图形分辨率,请执行以下操作:

import matplotlib as mpl
mpl.rcParams['figure.dpi']= dpi
Run Code Online (Sandbox Code Playgroud)

如果您要下载/打印笔记本,我建议将dpi设置在150到300之间.确保在magic命令%matplotlib inline之前运行,mpl.rcParams['figure.dpi']= dpi否则将dpi重置为其默认值(为了注意这一点,请记入@fabioedoardoluigialberto).

下面的snipppet只更改通过savefig方法保存的数字的dpi,而不是内联生成的数字.

import matplotlib as mpl
mpl.rc("savefig", dpi=dpi)
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是正确和最简单的答案.谢谢 (2认同)
  • 请注意,如果将所有内容放在同一单元格中,则会得到错误的行为。我认为这是因为魔术命令“%matplotlib”会触发异步行为,该行为会在mpl.rcParams ['figure.dpi'] = dpi`命令执行后*设置dpi。一种快速的解决方案是将命令拆分为其他单元格。 (2认同)
  • 天哪,这是金子。这肯定会让我摆脱与高级分析师的朋友圈。 (2认同)

Cos*_*ang 16

根据https://www.reddit.com/r/IPython/comments/1kg9e2/ipython_tip_for_getting_better_quality_inline/

你也可以在你的单元格中执行这个魔法:

%config InlineBackend.figure_format = 'svg'

打印质量看起来会更好.您也可以更改svgretina使用更高分辨率的PNG(不太好).不过请注意,如果您的图片太复杂,svg图片的尺寸会比retina图片大得多

  • 这应该更广为人知:) (3认同)
  • NB SVG 还不能“nbconvert”为乳胶。https://github.com/jupyter/nbconvert/issues/244 (2认同)

mwa*_*kom 7

内联matplotlib数字的分辨率与您在GUI窗口或保存的图像中看到的相比有所缩小,可能是为了节省笔记本文件中的空间.要更改它,您可以:

import matplotlib as mpl
mpl.rc("savefig", dpi=dpi)
Run Code Online (Sandbox Code Playgroud)

哪个dpi数字将控制内联图的大小/分辨率.我相信内联默认值是80,而matplotlib的默认值是100.

通过拖动手柄缩放结果绘图的原因是图形渲染为png,因此缩放它会缩放但不会更改内在分辨率.