2011-12-04 90 views
42

当我使用matplotlib的imshow()方法来表示一个小的numpy矩阵时,它最终会在像素之间做一些平滑处理。有什么办法可以禁用它吗?这会让我的数字在演示中产生误导。 A 28x28 matrix plotted with imshow()防止在matplotlib中imshow的反锯齿

上面的图是一个28x28图像,所以我应该看到的表示每个像素的颜色单一大正方形(使用于imagesc(当如MATLAB将显示它))。但相反,像素似乎与邻近的像素模糊。有没有办法禁用这种行为?

回答

48

imshow有一个插值选项,它控制如何以及是否将插值应用于矩阵的渲染。如果你尝试

imshow(array, interpolation="nearest") 

你可能会得到更像你想要的东西。作为一个例子

A=10*np.eye(10) + np.random.rand(100).reshape(10,10) 
imshow(A) 

imshow(A)

A=10*np.eye(10) + np.random.rand(100).reshape(10,10) 
imshow(A, interpolation="nearest") 

enter image description here

+0

谢谢,这似乎工作。出于好奇,为什么它被称为“最接近”的插值?本页面上的文档:http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.imshow没有描述“最接近”的功能。 –

+4

说实话,我不知道。在开发树中,现在还有一个'interpolation =“none”'选项,它的功能几乎相同。 [这个例子](http://matplotlib.sourceforge.net/examples/pylab_examples/image_interp.html)提供了关于'interpolation =“nearest”'试图实现什么的更多信息。 – talonmies

+9

它可能试图从“最近的”邻居抽样?在显示像素的附近 – DrSAR

19

相比,你也可以尝试的功能

matshow 

这个名字表明它完全符合你的要求 - 代表矩阵。 当你不需要过多地定制图形时,它非常方便。

BTW,为matplotlib最好的资源之一是他们Gallery