2017-02-01 1 views
0

Ich versuche, meine eigene Colourmap in Matplotlib zu machen, aber ich kann nicht scheinen, damit es richtig funktioniert, die Farben, die es ausgibt, sind nicht diejenigen, die ich erwartet habe ich habe die andere ähnlich versucht Frage Antworten, aber ohne Erfolg, ich kann nicht scheinen, meine Tupel richtig einzustellen.Benutzerdefinierte Farbmaps in Matplotlib

Ich habe eine Grafik, deren Intensität von 0 auf 1 geht. Ich möchte, dass die Null - Intensität eine RBG von (0,99,136), 0,5 Intensität (159,161,97) und die 1 Intensität (170 , 43,74)

Dies ist, was ich gerade versuche, aber ich habe ich missverstanden, wie man es benutzt.

from matplotlib.colors import LinearSegmentedColormap 

cdict1 = {'blue': ((0.0, 0.0, 0.0), 
        (0.5, 159/255, 159/255), 
        (1.0, 170/255, 170/255)), 

     'green': ((0.0, 99/255, 99/255), 
        (0.5, 161/255, 161/255), 
        (1.0, 43/255, 43/255)), 

     'red': ((0.0, 136/255, 136/255), 
        (0.5, 97/255, 97/255), 
        (1.0, 74/255, 74/255)) 
     } 

cm = LinearSegmentedColormap('cm', cdict1) 

ich deren Umsetzung in wie so

plt.subplot(1, 2, 1) 
matplotlib.rcParams.update({'font.size': 24}) 
plt.imshow(abs(store(0))**2, interpolation='none', extent=[-MaxMin, MaxMin, 0, N*dt], aspect=7, cmap=cm, vmin=0, vmax=1) 
plt.xlabel(r'$x$') 
plt.ylabel(r'$t$') 
'cbar = plt.colorbar()' 
plt.subplot(1, 2, 2) 
plt.imshow(abs(store(4*x*x))**2, interpolation='none', extent=[-MaxMin, MaxMin, 0, N*dt], aspect=8, cmap=cm, vmin=0, vmax=1) 
plt.xlabel(r'$x$') 
plt.ylabel(r'$t$') 
cbar = plt.colorbar() 
cbar.set_label(r'$|\psi(x,t)|^{2}$', fontsize=24) 
plt.show() 

Dies ist der Ausgang derzeit I

Colourmap I get currently

bekommen Und das ist, was ich Colourmap I want

erreichen wollen
+0

„Ich kann nicht zu bekommen scheinen, um es zu arbeiten“ ist keine ausreichende Beschreibung des Problems. Was genau bekommst du, wenn du diese Werte verwendest? Außerdem, wie genau verwenden Sie sie, d. H. Wie machen Sie die Colormap aus diesen Werten? – ImportanceOfBeingErnest

Antwort

0

Ich denke was du willst c Es ist viel einfacher als mit diesem komplizierten Wörterbuch.

Erstellen Sie einfach ein 2D-Array, das in der ersten Zeile die RGB-Werte der ersten Farbe, in der zweiten die der mittleren Farbe und in der letzten Zeile die Werte der endgültigen Farbe enthält.
Verwenden Sie dann die matplotlib.colors.LinearSegmentedColormap.from_list Funktion, um eine Colormap zu erhalten.

import numpy as np 
import matplotlib.colors 

colors = np.array([(0,99,136), (159,161,97), (170,43,74)])/255. 
cm = matplotlib.colors.LinearSegmentedColormap.from_list('cm', colors) 

enter image description here