ColorMap wird für Matplotlib -Kontourf -Diagramm mit benutzerdefinierten Ebenen ignoriert
-
26-10-2019 - |
Frage
Ich versuche, eine gefüllte Konturplot in Matplotlib (Win7, 1.1.0) zu erstellen. Ich möchte bestimmte Werte hervorheben, und die Ebenen sind näher am Log als linear.
Es gibt zahlreiche Colormaps, die zu mir passen würden, aber meine Wahl von CMAP wird ignoriert.
Muss ich eine benutzerdefinierte "Normalisierung" erstellen? Wenn ja, wird jede Kontur gemäß seinem Kantenwert gefärbt und dann mit derselben Farbe wie dem nächsten niedrigeren Wert gefüllt? Warum ist das Symptom davon, meine Farbkarte zu ignorieren ... ist diese Ausnahme während der Konstruktion, die gefangen wird und meine Anfrage stillschweigend ignoriert wird?
Meine ursprünglichen Daten hatten fehlende Werte. Ich habe damit gespielt, dass dieses Nan, groß und klein ... in jedem Fall versucht habe, sie zu maskieren und die "externen" Werte nicht zu maskieren. Ich habe auch alle Permutationen mithilfe der Standardstufen und der Norm ausprobiert.
lev = [0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]
norml = colors.normalize(0,32)
cs = plt.contourf(x,z,data,cmap=cm.gray, levels=lev, norm = norml)
Ich hoffe, dieses Ausschnitt reicht aus, um zumindest das Gespräch zu beginnen.
Danke, Eli
Lösung
Wenn ich Sie korrekt verstanden habe, müssen Sie Ihre Daten in Farben neu anhand Ihrer Ebenen als Basis und nicht als Standard -Linear -Skalierung neu skalieren. Wenn das richtig ist, müssen Sie verwenden colors.BoundaryNorm
als Normfaktor. Betrachten Sie das folgende Beispiel:
x = np.arange(0,8,0.1)
y = np.arange(0,8,0.1)
z = (x[:,None]-4) ** 2 + (y[None,:]-4) ** 2
lev = [0.1,0.2,0.5,1.0,2.0,4.0,8.0,16.0,32.0]
norml = colors.BoundaryNorm(lev, 256)
cs = plt.contourf(x, y, z, cmap = cm.jet, levels = lev, norm = norml)
plt.show()
Dies ergibt
Vergleichen Sie es mit Standardeinstellung Normalize
Verhalten:
Ich hoffe, das hilft.