matplotlib imshow-normalisation des couleurs par défaut

j'ai toujours eu des problèmes avec mes cartes de couleurs en utilisant imshow, certaines couleurs semblent juste devenir noires. J'ai enfin réalisé que imshow semble, par défaut, normaliser la matrice des valeurs flottantes que je lui donne.

j'aurais attendu un tableau tel que [[0,0.25],[0.5,0.75]] les couleurs de la carte, correspondant à ceux des valeurs absolues, mais de 0,75 sera interprété comme un 1. Dans le cas extrême, un tableau N x N de 0.2 (par exemple), il suffit de produire un grand carré noir, plutôt que ce à quoi on s'attendrait à 0,2 correspond dans la carte couleur (peut-être un 20% de gris).

Existe-t-il un moyen de prévenir ce comportement? Il est particulièrement gênant lorsqu'couleur personnalisée, les cartes ont de nombreuses discontinuités, un petit changement d'échelle, pourrait provoquer toutes les couleurs à changer complètement.

25
demandé sur oLas 2014-03-02 02:28:48

1 réponses

spécifiez juste vmin=0, vmax=1.

Par défaut, imshow normalise les données à son minimum et max. Vous pouvez contrôler cela avec l'un des vmin et vmax arguments ou avec le norm argument (si vous voulez une échelle non linéaire).

comme un exemple rapide:

import matplotlib.pyplot as plt

data = [[0, 0.25], [0.5, 0.75]]

fig, ax = plt.subplots()
im = ax.imshow(data, cmap=plt.get_cmap('hot'), interpolation='nearest',
               vmin=0, vmax=1)
fig.colorbar(im)
plt.show()

enter image description here

42
répondu Joe Kington 2014-03-02 01:26:20