web-dev-qa-db-fra.com

Comment «désactiver» l'effet flou d'imshow () dans matplotlib?

Je veux faire un tracé de couleur des probabilités, mais imshow génère des valeurs floues pour les points qui ont une probabilité nulle. Comment puis-je me débarrasser de cette périphérie floue autour de points de grille réels?

Exemple:

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.15012305e-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

41
Cupitor

Par défaut (qui est modifié mpl 2.0), imshow interpole les données (comme vous le feriez pour une image). Tout ce que vous avez à faire est de lui dire de ne pas interpoler:

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

'nearest' fonctionnera également pour ce que vous voulez. Voir lissage entre pixels d'imagesc\imshow dans matlab comme le matplotlib imshow pour des exemples de tous les types d'interpolation.

doc

62
tacaswell

Vous pouvez également utiliser:

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

Cela fonctionne particulièrement bien pour les variables discrètes.

3
apublius