2013-11-15 10 views
41

Voglio creare un grafico a colori delle probabilità, tuttavia imshow genera valori sfocati per i punti che hanno probabilità zero. Come posso liberarmi di questa periferia sfocata attorno ai punti della griglia reale?Come disattivare l'effetto sfocato di imshow() in matplotlib?

Esempio:

import numpy as np 
import matplotlib.pyplot as plt 

a=np.asarray([[ 0.00000000e+00 , 1.05824446e-01 , 2.05086136e-04, 0.00000000e+00], 
[ 1.05824446e-01 , 3.15e-01 , 1.31255127e-01 , 1.05209188e-01], 
[ 2.05086136e-04 , 1.31255127e-01 , 0.00000000e+00 , 0.00000000e+00], 
[ 0.00000000e+00 ,1.05209188e-01 , 0.00000000e+00 , 0.00000000e+00]]) 
im=plt.imshow(a,extent=[0,4,0,4],origin='lower',alpha=1,aspect='auto') 
plt.show() 

enter image description here

risposta

56

Per impostazione predefinita (che è cambiato mpl 2.0), imshow interpola i dati (come si vorrebbe fare per l'immagine). Tutto quello che devi fare è dirgli di non interpolare:

im = plt.imshow(..., interpolation='none') 

'nearest' funzionerà anche per ciò che si vuole. Vedere smoothing between pixels of imagesc\imshow in matlab like the matplotlib imshow per esempi di tutti i tipi di interpolazione.

doc

+1

Grazie. L'attributo corretto è l'interpolazione. 'im = plt.imshow (..., interpolation = 'none')' – Cupitor

+1

@Naji Yup mi dispiace. Lo scrivo più volte al giorno .... – tacaswell

+3

Nota che alcuni backend non supportano 'none', mentre' nearest' sembra essere accettato ovunque. – tiago

3

Si può anche utilizzare:

im = plt.imshow(..., interpolation='nearest') 

Questo funziona bene soprattutto per le variabili discrete.

Problemi correlati