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

War es hilfreich?

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

enter image description here

Vergleichen Sie es mit Standardeinstellung Normalize Verhalten:

enter image description here

Ich hoffe, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top