Nichtlineare Skalierung einer Colormap, um den Kontrast zu verbessern

8

Der folgende Python-Code erstellt eine Heatmap einer Matrix, die normalerweise verteilte Werte enthält

%Vor%

Dies ist die Ausgabe dieses Codes

Ich möchte den Kontrast dieses Bildes verbessern, indem ich die Werte nahe Null "ausgeblendet" habe. Ich kann dies leicht tun, indem ich die ursprüngliche Daten wie folgt disdigloid skalieren:

%Vor%

Hier ist die Ausgabe.

Ich bin zufrieden mit dem Ergebnis, außer der Tatsache, dass in dieser Version das Original Werte wurden gegen skalierte Werte ausgetauscht.

Gibt es eine Möglichkeit, eine nichtlineare Zuordnung von Werten zu Colormap durchzuführen?

    
Boris Gorelik 27.06.2011, 11:59
quelle

1 Antwort

4

Eine Colormap enthält ein Wörterbuch mit roten, grünen und blauen Werten, die über das Intervall [0,1] abgebildet werden. Die linearen segmentierten Colormap Klassendokumente geben das Beispiel

%Vor%

"Jede Reihe in der Tabelle für eine gegebene Farbe ist eine Folge von x, y0, y1 Tupeln. In jeder Folge muss x monoton von 0 auf 1 ansteigen. Für jeden Eingabewert z zwischen x [i] und x [i + 1], wird der Ausgabewert einer bestimmten Farbe linear zwischen y1 [i] und y0 [i + 1] interpoliert: "

Die RdYlGn colormap hat 11 x Werte für jede Farbe von 0 bis 1,0 in Schritten von 0,1. Sie können die Werte cdict abrufen, indem Sie

aufrufen %Vor%

Sie können dann die x-Werte in die von Ihnen gewünschten Schritte ändern (solange sie monoton ansteigen und von 0 bis 1 reichen) und eine neue Farbtabelle erhalten, indem Sie matplotlib.colors.LinearSegmentedColormap auf Ihrem neuen cdict aufrufen. Es gibt einige großartige Beispiele dafür im Matplotlib Cookbook .

    
Stephen Terry 27.06.2011, 16:53
quelle