Python: изменение / настройка цветовых карт в Seaborn - PullRequest
0 голосов
/ 12 октября 2018

Я потратил слишком много времени на изучение этого, некоторые вкладки все еще открыты в моем браузере: Link1 Link2 Link3 Link4

Я должен работать!

В любом случае, моя проблема заключается в следующем: я использую чужие сценарии для создания большого количества тепловых карт, которые я затем должен просмотреть и отсортировать / назначить:

Вот один из примеров: HM sample

Мне нужно иметь возможность легко отличить 0,03 от нуля, но, как вы можете видеть, они выглядят практически одинаково.Идеальным решением было бы: белый (только ноль) -желтый-оранжевый-красный или белый (только ноль) -оранжевый-красный

Разработчик использовал 'YlOrRd' примерно так:

sns.heatmap(heat_map, annot=True, fmt=".2g", cmap="YlOrRd", linewidths=0.5, 
                    linecolor='black', xticklabels=xticks, yticklabels=yticks
                    )

Я попробовал несколько стандартных / цветовых опций цветовой карты, которые были предоставлены безрезультатно.

У меня нет реального опыта в создании цветовых карт, и я не хочу ломать то, что уже работает.У кого-нибудь есть какие-нибудь идеи?

Спасибо

** Я ограничен в том, какой код / ​​примеры я могу опубликовать, потому что это рабочий продукт.

1 Ответ

0 голосов
/ 14 октября 2018

Один из вариантов - взять цвета из существующей карты цветов, заменить первую на белый и создать новую карту цветов из этих манипулируемых значений.

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt
import matplotlib.colors
import seaborn as sns

# some data
a = np.array([0.,0.002,.005,.0099,0.01,.0101,.02,.04,.24,.42,.62,0.95,.999,1.])
data = np.random.choice(a, size=(12,12))

# create colormap. We take 101 values equally spaced between 0 and 1
# hence the first value 0, second value 0.01
c = np.linspace(0,1,101)
# For those values we store the colors from the "YlOrRd" map in an array
colors = plt.get_cmap("YlOrRd",101)(c)
# We replace the first row of that array, by white
colors[0,:] = np.array([1,1,1,1])
# We create a new colormap with the colors
cmap = matplotlib.colors.ListedColormap(colors)

# Plot the heatmap. The format is set to 4 decimal places 
# to be able to disingush specifically the values ,.0099, .0100, .0101,
sns.heatmap(data, annot=True, fmt=".4f", cmap=cmap, vmin=0, vmax=1,
            linewidths=0.5,  linecolor='black')
plt.show()

enter image description here

...