Ich versuche, imshow in matplotlib zu verwenden, um Daten als Heatmap zu zeichnen, aber einige der Werte sind NaNs. Ich möchte, dass die NaNs als Sonderfarbe gerendert werden, die in der Farbkarte nicht enthalten ist.
Beispiel:
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()
Das resultierende Bild ist unerwartet ganz blau (die niedrigste Farbe in der Jet-Farbkarte). Wenn ich das Plotten jedoch so mache:
ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)
--dann bekomme ich etwas Besseres, aber die NaN-Werte werden in derselben Farbe wie vmin gezeichnet ... Gibt es eine elegante Möglichkeit, NaNs so einzustellen, dass sie mit einer speziellen Farbe gezeichnet werden (z. B. grau oder transparent)?
python
matplotlib
nan
Adam Fraser
quelle
quelle
matplotlib.__version__=='1.2.1'
) funktioniert dies problemlos.Antworten:
Bei neueren Versionen von Matplotlib ist es nicht mehr erforderlich, ein maskiertes Array zu verwenden.
Lassen Sie uns zum Beispiel ein Array generieren, bei dem jeder 7. Wert ein NaN ist:
Wir können die aktuelle Farbkarte ändern und das Array mit den folgenden Zeilen zeichnen:
quelle
arr = np.ma.array(arr, mask=(arr == 0))
.Hrm, anscheinend kann ich dazu ein maskiertes Array verwenden:
Dies sollte ausreichen, obwohl ich immer noch offen für Vorschläge bin. :]
quelle
matplotlib.cm.jet
, daher erstelle ich normalerweise eine Kopie :import copy; cmap=copy.copy(matplotlib.cm.jet)
. Wenn Sie 0-Werte auf eine andere Farbe setzen möchten, sollte so etwascmap._init(); cm._lut[:,0] = (1,1,1,1)
funktionieren.set_over
undset_under
zur Steuerung der Färbung von Werten außerhalb des Bereichs. Das Standardverhalten besteht darin, mit dem oberen / unteren Rand des Farbbereichs übereinzustimmen.masked_array
erforderlich? Wenna
NaN-Werte enthalten sind (so scheint esmask=np.isnan(a)
), werden durchimshow
einfachesa
Anpassen des Arrays mit der benutzerdefinierten Kartecmap
NaN-Zellen mit der erforderlichen Farbe (weiß) angezeigt. So funktioniert es bei mir. Gibt es Ausnahmen?nan
Werte und Medianwerte in derselben Farbe dargestellt werden, z. B. Weiß.