2017-01-23 9 views
0

В matplotlib, я хотел бы изменить цвет цветной панели в определенном интервале значений. Например, я хотел бы изменить панель сейсмического цвета, чтобы значения между -0,5 и 0,5 стали белыми, как я могу это сделать?Как изменить цвет цветной панели (в определенном интервале значений)?

спасибо

+0

Вы написали код, который вы могли бы разместить? –

ответ

3

Вы в основном нужны создать свою собственную палитру, которая имеет определенные особенности, которые вы хотите. При этом можно использовать существующие цветовые карты.

Цветовые карты всегда находятся между 0 и 1. Затем этот диапазон будет отображаться в интервале данных. Поэтому для создания белых между -0.5 и 0.5 нам нужно знать диапазон данных - скажем, данные идут от -1 до 1. Затем мы можем решить, чтобы нижняя (блюзовая) часть сейсмической карты переходила от -1 к -0.5, затем имела белые между -0.5 и +0.5 и, наконец, верхнюю часть сейсмической карты (красные) от 0.5 до 1. На языке цветовой карты это соответствует диапазонам [0,0.25], [0.25, 0.75] и [0.75,1]. Затем мы можем создать список, причем первый и последний 25% процентов представляют собой цвета сейсмической карты и средний 50% белый.

Этот список может использоваться для создания цветовой карты, используя matplotlib.colors.LinearSegmentedColormap.from_list("colormapname", listofcolors).

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.colors 

n=50 
x = 0.5 
lower = plt.cm.seismic(np.linspace(0, x, n)) 
white = plt.cm.seismic(np.ones(100)*0.5) 
upper = plt.cm.seismic(np.linspace(1-x, 1, n)) 
colors = np.vstack((lower, white, upper)) 
tmap = matplotlib.colors.LinearSegmentedColormap.from_list('terrain_map_white', colors) 

x = np.linspace(0,10) 
X,Y = np.meshgrid(x,x) 
z = np.sin(X) * np.cos(Y*0.4) 

fig, ax = plt.subplots() 
im = ax.imshow(z, cmap=tmap)  
plt.colorbar(im) 

plt.show() 

enter image description here

Для более общих случаях вам может понадобиться цвет нормализации (с использованием matplotlib.colors.Normalize). См. this example, где определенный цвет в цветовой палитре всегда фиксируется при значении данных 0, независимо от диапазона данных.