Comment puis-je tracer des valeurs NaN comme une couleur spéciale avec imshow en matplotlib?

StackOverflow https://stackoverflow.com/questions/2578752

  •  24-09-2019
  •  | 
  •  

Question

Je suis en train d'utiliser imshow dans matplotlib pour tracer des données comme heatmap, mais certaines valeurs sont NaN. Je voudrais les NaN à restituer sous forme d'une couleur spéciale ne trouve pas dans la palette de couleurs.

exemple:

import numpy as np
import matplotlib.pyplot as plt
f = plt.figure()
ax = f.add_subplot(111)
a = np.arange(25).reshape((5,5)).astype(float)
a[3,:] = np.nan
ax.imshow(a, interpolation='nearest')
f.canvas.draw()

L'image résultante est de façon inattendue tous bleu (couleur la plus faible dans le jet palette de couleurs). Cependant, si je fais le tracé comme celui-ci:

ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)

- alors je reçois quelque chose de mieux, mais les valeurs NaN sont attirés par la même couleur que Vmin ... Y at-il une manière gracieuse que je peux mettre NaN à tirer avec une couleur particulière (par exemple: gris ou transparent)?

Était-ce utile?

La solution

Hmm, il semble que je peux utiliser un tableau masqué pour faire ceci:

masked_array = np.ma.array (a, mask=np.isnan(a))
cmap = matplotlib.cm.jet
cmap.set_bad('white',1.)
ax.imshow(masked_array, interpolation='nearest', cmap=cmap)

Cela devrait suffire, mais je suis toujours ouvert aux suggestions. :]

Autres conseils

Avec les nouvelles versions de Matplotlib, il est pas nécessaire d'utiliser plus d'un tableau masqué.

Par exemple, nous allons générer un tableau où chaque valeur 7 est un NAN:

arr = np.arange(100, dtype=float).reshape(10, 10)
arr[~(arr % 7).astype(bool)] = np.nan

Nous pouvons modifier la palette de couleurs actuelle et tracer le tableau avec les lignes suivantes:

current_cmap = matplotlib.cm.get_cmap()
current_cmap.set_bad(color='red')
plt.imshow(arr)

résultat complot

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top