web-dev-qa-db-fra.com

Comment redéfinir une couleur pour une valeur spécifique dans une palette de couleurs matplotlib

Je souhaite utiliser la palette de couleurs Rainbow dans une image utilisant imshow. Cela fonctionne parfaitement, mais je veux redéfinir la couleur pour la valeur 0. Au lieu de violette, je veux utiliser du blanc.

Je veux le faire uniquement pour la valeur zéro, toutes les autres valeurs peuvent rester avec les valeurs par défaut dans la palette de couleurs.

Une idée comment faire sans avoir à modifier manuellement la palette de couleurs?

23
otmezger

Vous pouvez aussi utiliser set_under ce qui, à mon avis, est plus logique que d'utiliser set_bad

my_cmap = matplotlib.cm.get_cmap('Rainbow')
my_cmap.set_under('w')
imshow(np.arange(25).reshape(5, 5),
       interpolation='none',
       cmap=my_cmap,
       vmin=.001)

Vous pouvez modifier la barre de couleur pour afficher également la couleur "sous" (et la symétrie "sur") en utilisant le kwarg extend, voir exemple et docs .

Pour une réponse à un doublon avec des exemples plus complets, voir Comment créer une palette de couleurs matplotlib qui traite une valeur spécialement?

34
tacaswell