2012-03-27 15 views
4

Ich benutze die Colormap "Jet", um meine Grafiken zu plotten. Aber ich hätte gerne die niedrigeren Werte in weißer Farbe und diese Farbkarte geht von blau zu rot. Ich möchte auch nicht eine andere Colormap verwenden, weil ich diese Farbpalette brauche ... Ich habe versucht, meine Colormap, um das gleiche wie "Jet" mit einer Reihe von Werten in weiß zu bekommen, aber das ist zu schwierig. Jemand könnte mir bitte helfen? DankePython Matplotlib Colormap

Antwort

6

Es gibt ziemlich viel dieses Beispiel auf der colormaps page. Graben durch die matplotlib Quelle auf meinem Rechner, ist Jet definiert als (in _cm.py):

_jet_data = {'red': ((0., 0, 0), (0.35, 0, 0), (0.66, 1, 1), (0.89,1, 1), 
         (1, 0.5, 0.5)), 
       'green': ((0., 0, 0), (0.125,0, 0), (0.375,1, 1), (0.64,1, 1), 
         (0.91,0,0), (1, 0, 0)), 
       'blue': ((0., 0.5, 0.5), (0.11, 1, 1), (0.34, 1, 1), (0.65,0, 0), 
         (1, 0, 0))} 
+0

Vielen Dank, aber wie kann ich die Farbe weiß für die unterste Ebene hinzufügen? Ich verstehe die dreifachen Zahlen nicht genau und wo kann ich sie finden? Wenn ich beispielsweise die Farbskala von den Werten 0 bis 10 ändern möchte, muss ich andere Tripel hinzufügen? – gwen

+0

Die unterste Ebene Ihrer Colormap ist in der ersten Zeile jedes Tupels von Rot, Grün und Blau definiert, wobei das erste Element des Tupels die Werte gamma (von 0 bis 1) repräsentiert (denken Sie an die "Position" in a) Farbbalken). – carla

+0

Wie Herr E schrieb, können Sie die Wörterbücher finden, die matplotlib colormaps in _cm.py generieren. Diese Datei befindet sich in Ihrem Python-Ordner, normalerweise im folgenden Pfad: C: \ Python ## \ Lib \ site-packages \ matplotlib \ – carla

9

Wahrscheinlich sollte es eine einfachste Lösung sein, aber die Art, wie ich ist herausgefunden, indem Sie Ihre eigene matplotlib.colors.LinearSegmentedColormap erstellen, basierend auf dem "Jet".

(Die unterste Ebene Ihrer Colormap wird in der ersten Zeile jedes Tupels von Rot, Grün und Blau definiert, also beginnen Sie mit der Bearbeitung. Ich füge ein zusätzliches Tupel hinzu, um im unteren Teil einen deutlich weißen Punkt zu haben. ... für jede Farbe, im ersten Element des Tupels geben Sie die Position in Ihrer Farbleiste an (von 0 bis 1) und in der zweiten und dritten die Farbe selbst).

from matplotlib.pyplot import * 
import matplotlib 
import numpy as np 

cdict = {'red': ((0., 1, 1), 
       (0.05, 1, 1), 
       (0.11, 0, 0), 
       (0.66, 1, 1), 
       (0.89, 1, 1), 
       (1, 0.5, 0.5)), 
     'green': ((0., 1, 1), 
        (0.05, 1, 1), 
        (0.11, 0, 0), 
        (0.375, 1, 1), 
        (0.64, 1, 1), 
        (0.91, 0, 0), 
        (1, 0, 0)), 
     'blue': ((0., 1, 1), 
        (0.05, 1, 1), 
        (0.11, 1, 1), 
        (0.34, 1, 1), 
        (0.65, 0, 0), 
        (1, 0, 0))} 

my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256) 

pcolor(np.random.rand(10,10),cmap=my_cmap) 
colorbar() 
show() 

Sie folgende erhalten: jet colormap with white

7

Es gibt eine andere Art und Weise ist das gleiche, ohne die Definition eines neuen colobar zu tun. Sie können die cmap.set_under-Methode verwenden, die die Farbe definiert, die für alle Werte unterhalb eines bestimmten Schwellenwerts verwendet werden soll. Der Schwellenwert wird während der pColorMesh definiert:

from matplotlib.pyplot import * 
import numpy as np 

mycmap = cm.get_cmap('jet') 
mycmap.set_under('w') 

pcolor(np.random.rand(10,10), cmap=mycmap, vmin=.1) 
colorbar() 
show() 
+0

Jetzt ist das hilfreich! – hdrz