Как центрировать нелинейную карту вокруг RdYlGn?

У меня есть список чисел от -5 до 0,7. Я хочу, чтобы числа от -0,5 до 0 охватывали самые темные красные цвета в RdYlGn на карте (на -0,5) до того же самого Cmap 0, который имеет RdYlGn (желтый), и вплоть до самых темных зеленых на карте 0,7.

Иными словами, я бы хотел, чтобы диапазон красных RdYlGn не варьировался от -4 до 0, а от -0,5 до 0. И я бы хотел, чтобы диапазон зеленых RdYlGn не варьировался от 4 до 0, а от 0,7 до 0. DivergingNorm и функции из других переполнений стека, переделывающие cdict, до сих пор не работали для меня.

Я хотел бы сделать это без нормализации, если это возможно.

Всего 1 ответ


Что не так с оригинальным кодом, трудно сказать, не видя код. Кроме того, трудно понять, что цифры 4 и -4 делают в объяснении.

Вот пример с BoundaryNorm от -0.5 до 0.7 и его центром в 0 :

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

ymin = -0.5
ymax = 0.7
x = np.random.uniform(0, 1, 1000)
y = np.random.uniform(ymin, ymax, 1000)

fig, ax1 = plt.subplots(figsize=(12,5))
norm = mcolors.DivergingNorm(vcenter=0, vmin=ymin, vmax=ymax)
scat = ax1.scatter(x, y, s=4, c=y, cmap="RdYlGn", norm=norm)
plt.colorbar(scat, ax=ax1)
plt.show()

результирующий сюжет

Чтобы сделать разницу еще более экстремальной, приведем пример с пределами -0.2, 0, 0.7 :

второй пример


Есть идеи?

10000