Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent anti-aliasing for imshow in matplotlib

When I use matplotlib's imshow() method to represent a small numpy matrix, it ends up doing some smoothing between pixels. Is there any way to disables this? It makes my figure's misleading in presentations.A 28x28 matrix plotted with imshow()

The figure above is a 28x28 image, so I should be seeing large squares of single colors representing each pixel (as matlab would display it when using imagesc()). But Instead, the pixels seem to be blurred with neighboring pixels. Is there a way to disable this behavior?

like image 751
Christopher Dorian Avatar asked Dec 04 '11 16:12

Christopher Dorian


People also ask

How do you normalize Imshow?

Just specify vmin=0, vmax=1 . By default, imshow normalizes the data to its min and max. You can control this with either the vmin and vmax arguments or with the norm argument (if you want a non-linear scaling).

What is anti-aliasing Python?

As you can see, anti-aliasing has reduced the jaggedness and created a "smoother" look. This is achieved by blending the pixels on the edge of the text with the background. The jaggs are not completely opaque, but are partially transparent.

What is CMAP in PLT Imshow?

cmap : This parameter is a colormap instance or registered colormap name. norm : This parameter is the Normalize instance scales the data values to the canonical colormap range [0, 1] for mapping to colors. vmin, vmax : These parameter are optional in nature and they are colorbar range.

What is Imshow interpolation?

It will result an image in which pixels are displayed as a square of multiple pixels. There is no relation between interpolation='nearest' and the grayscale image being displayed in color. By default imshow uses the jet colormap to display an image.


2 Answers

There is an interpolation option for imshow which controls how and if interpolation will be applied to the rendering of the matrix. If you try

imshow(array, interpolation="nearest")  

you might get something more like you want. As an example

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

imshow(A)

compared with

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

enter image description here

like image 169
talonmies Avatar answered Sep 21 '22 04:09

talonmies


you can also try the function

matshow  

which name indicated that it does exactly what you asked - represent matrices. It is quite handy when you do not need to customise the figure too much.

BTW, one of the best resources for matplotlib is their Gallery

like image 27
eldad-a Avatar answered Sep 23 '22 04:09

eldad-a