Seaborn diverging_palette с более чем 2-мя цветовыми тонами

Я пытался построить корреляционную матрицу с помощью Seaborn, но я хотел выделить как положительные, так и отрицательные экстремальные значения красным цветом, а средние значения - зеленым. Во всех примерах, которые мне удалось найти, корреляционная матрица была построена с помощью diverging_palette, но это позволяет вам выбрать только два цвета для концов спектра и выбрать светлый (белый) или темный (черный) цвет для середины. ценности. Я не смог найти решение для этого после поиска на StackOverflow и других сайтах, поэтому я публикую найденное мной решение.

Вот примеры из Seaborn:

https://seaborn.pydata.org/examples/many_pairwise_correlations.html https://seaborn.pydata.org/generated/seaborn.heatmap.html

И вот код для создания графика ниже, чтобы проиллюстрировать проблему. Я ищу, чтобы зеленый был значением 0, а красный - положительными и отрицательными значениями.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(5)
df = pd.DataFrame(np.random.randn(5,5))

# Generate a custom diverging colormap
cmap = sns.diverging_palette(133, 10, as_cmap=True)

with sns.axes_style("white"):
    ax = sns.heatmap(df, annot=True, fmt='.2f', cmap=cmap, vmin=-0.99, vmax=.99, center=0.00,
                square=True, linewidths=.5, annot_kws={"size": 8}, cbar_kws={"shrink": .5})
plt.show()

введите здесь описание изображения


person Troy D    schedule 04.06.2018    source источник


Ответы (1)


Вы можете использовать LinearSegmentedColormap для создания цветовой карты из списка цветов, что позволяет вам достичь эффекта diverging_pallette с гораздо большим контролем над преобразованием цветов.

Вставка этого кода в приведенный выше пример дает эффект, который я искал:

from matplotlib.colors import LinearSegmentedColormap
cmap = LinearSegmentedColormap.from_list(
    name='test', 
    colors=['red','white','green','white','red']
)

введите здесь описание изображения

person Troy D    schedule 04.06.2018