2017-02-01 1 views
0

Я пытаюсь создать свой собственный colourmap в matplotlib, но я не могу заставить его работать правильно, цвета, которые он выводит, не те, которые я ожидал, я пробовал другие аналогичные ответы на вопросы, но безрезультатно, я не могу правильно настроить свои кортежи.Пользовательские colourmaps в matplotlib

У меня есть график, который имеет интенсивность, идущую от 0 до 1. Я хочу, чтобы интенсивность нуля имела RBG (0,99,136), 0,5 интенсивность, чтобы иметь (159,161,97) и интенсивность 1 иметь (170 , 43,74)

Это то, что я сейчас пытаюсь, но я не понимаю, как его использовать.

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) 

Я его реализации в качестве так

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() 

Это выход я в настоящее время получить

Colourmap I get currently

И это то, что я хочу достичь Colourmap I want

+0

«Я не могу заставить его работать» не является достаточным описание проблемы. Что именно вы получаете при использовании этих значений? Кроме того, как именно вы их используете, т. Е. Как вы делаете colormap от этих значений? – ImportanceOfBeingErnest

ответ

0

Я думаю, что вы хотите c это намного проще, чем использование этого сложного словаря.

Просто создайте 2D-массив, который имеет в первой строке значения RGB от первого цвета, во втором - от среднего цвета, а в последней строке - значения от окончательного цвета.
Затем используйте функцию matplotlib.colors.LinearSegmentedColormap.from_list для получения цветовой карты.

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

Смежные вопросы