2011-12-04 14 views
42

Cuando utilizo el método imshow() de matplotlib para representar una pequeña matriz numpy, termina haciendo un suavizado entre los píxeles. ¿Hay alguna forma de desactivar esto? Hace que mi figura sea engañosa en las presentaciones. A 28x28 matrix plotted with imshow()Prevenir el anti-aliasing para imshow en matplotlib

La imagen de arriba es una imagen de 28x28, por lo que debería ver cuadrados grandes de colores individuales que representen cada píxel (como lo mostraría matlab al usar imagesc()). Pero en cambio, los píxeles parecen estar borrosos con los píxeles vecinos. ¿Hay alguna forma de desactivar este comportamiento?

Respuesta

48

Existe una opción de interpolación para imshow que controla cómo y si se aplicará interpolación a la representación de la matriz. Si prueba

imshow(array, interpolation="nearest") 

puede obtener algo más como desee. A modo de ejemplo

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

imshow(A)

en comparación con

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

enter image description here

+0

, que parece funcionar. Por curiosidad, ¿por qué se llama 'más cercano' para la interpolación? La documentación en esta página: http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.imshow no describe lo que hace 'más cercano'. –

+4

Para ser honesto, no sé. En el árbol de desarrollo ahora también hay una opción 'interpolation =" none "' que hace más o menos lo mismo. [Este ejemplo] (http://matplotlib.sourceforge.net/examples/pylab_examples/image_interp.html) proporciona un poco más de información sobre lo que 'interpolation =" más cercano "' está tratando de lograr. – talonmies

+9

¿Es posible que intente tomar muestras del vecino "más cercano"? en las proximidades del píxel de visualización – DrSAR

19

también puede probar la función

matshow 

cuyo nombre indica que hace exactamente lo que usted solicitó: representar matrices. Es muy útil cuando no necesita personalizar demasiado la figura.

Por cierto, uno de los mejores recursos para matplotlib es su Gracias Gallery

Cuestiones relacionadas