Вы в основном нужны создать свою собственную палитру, которая имеет определенные особенности, которые вы хотите. При этом можно использовать существующие цветовые карты.
Цветовые карты всегда находятся между 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()
Для более общих случаях вам может понадобиться цвет нормализации (с использованием matplotlib.colors.Normalize
). См. this example, где определенный цвет в цветовой палитре всегда фиксируется при значении данных 0, независимо от диапазона данных.
Вы написали код, который вы могли бы разместить? –