Я пытаюсь построить асимметричный диапазон цветов на графике рассеяния.Я хочу, чтобы цвета были точным представлением интенсивности, используя расходящуюся карту цветов .У меня проблемы с изменением цветовой шкалы, чтобы представить это.
Например, я хочу построить xy-данные с диапазоном [-2, 10] на диаграмме рассеяния так, чтобы цветная полоса показывала только диапазон -2до 10 с нейтральным цветом на 0, но «интенсивность» на -2 и 2 одинаковы.
Я пытался использовать Нормализация ColorMap и усечение цветовой карты , но, похоже, мне нужна какая-то комбинация из двух, которую я не могу понять.
MCV Пример
x = np.arange( 0, 1, 1e-1 )
xlen = x.shape[ 0 ]
z = np.random.random( xlen**2 )*12 - 2
splt = plt.scatter(
np.repeat( x, xlen ),
np.tile( x, xlen ),
c = z, cmap = 'seismic',
s = 400
)
plt.colorbar( splt )
Используя MidpointNormalize
class MidpointNormalize(colors.Normalize):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint = midpoint
colors.Normalize.__init__(self, vmin, vmax, clip)
def __call__(self, value, clip=None):
# I'm ignoring masked values and all kinds of edge cases to make a
# simple example...
x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
return np.ma.masked_array(np.interp(value, x, y))
x = np.arange( 0, 1, 1e-1 )
xlen = x.shape[ 0 ]
z = np.random.random( xlen**2 )*12 - 2
norm = MidpointNormalize( midpoint = 0 )
splt = plt.scatter(
np.repeat( x, xlen ),
np.tile( x, xlen ),
c = z, cmap = 'seismic', s = 400,
norm = norm
)
plt.colorbar( splt )
, я могу получить цветовой центр по центру в 0, но интенсивностинесправедливыт.е. интенсивность в -2 намного темнее, чем в + 2.
Проблема с усечением карты цветов, с которой я столкнулся, заключается в том, что я не знаю, где находится правильное место для усечения.
Вот пример изменения, которое я хочу внести в цветную полосу: 