web-dev-qa-db-fra.com

matplotlib imshow - normalisation des couleurs par défaut

J'ai toujours eu des problèmes avec mes cartes de couleurs lors de l'utilisation de imshow, certaines couleurs semblent devenir noires. J'ai finalement réalisé que imshow semble, par défaut, normaliser la matrice des valeurs à virgule flottante que je lui donne.

Je m'attendais à un tableau tel que [[0,0.25],[0.5,0.75]] pour afficher les couleurs appropriées de la carte, correspondant à ces valeurs absolues mais le 0,75 sera interprété comme un 1. Dans le cas extrême, un tableau N x N de 0,2 (par exemple), produirait juste un grand carré noir , plutôt que ce à quoi on s'attendrait à ce que 0,2 corresponde dans la carte des couleurs (peut-être un gris à 20%).

Existe-t-il un moyen d'empêcher ce comportement? Il est particulièrement gênant lorsque les cartes de couleurs personnalisées présentent de nombreuses discontinuités, un petit changement d'échelle pourrait entraîner le changement complet de toutes les couleurs.

31
oLas

Précisez simplement vmin=0, vmax=1.

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

Comme 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

52
Joe Kington