Тепловая карта Python и цвета цветовой панели разные - PullRequest
0 голосов
/ 03 октября 2018

Я использую matplotlib и seaborn для создания тепловой карты моей корреляционной матрицы с определенными цветами, представляющими диапазоны данных.Я столкнулся с проблемой, когда моя цветовая панель не отображает полный спектр цветов в тепловой карте.редактировать: проблема заключается в цветовой шкале в диапазоне от -0,5 до -0,3.Цвет здесь должен быть «королевский синий».Правильный цвет представлен на тепловой карте, но не на цветовой шкале.

see image

Вот мой код для тепловой карты:

from matplotlib import colors
cmap = colors.ListedColormap(["navy", "royalblue", "lightsteelblue", "beige", "peachpuff", "salmon", "darkred"])
bounds = [-1, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 1]
norm = colors.BoundaryNorm(bounds, cmap.N)

Это применимо к моейданные, corr_matrix.

#Generate mask for correlation matrix
mask = np.zeros_like(corr_matrix, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True

#print the correlation matrix
fig, ax = plt.subplots()
sns.heatmap(corr_matrix, annot=True, fmt='.4f', cmap=cmap, norm=norm, mask=mask, cbar=True, ax=ax, cbar_kws=dict(ticks=[-1, -0.5, -0.3, -0.1, +0.1, +0.3, +0.5, +1]))
ax.set_title('Correllation Matrix')
ax.set_yticklabels(ax.get_yticklabels(), rotation="horizontal")
plt.show()

Спасибо!

1 Ответ

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

Похоже на проблему морского происхождения.При использовании чистого matplotlib

im = ax.imshow(np.ma.masked_array(corr_matrix, mask), cmap=cmap, norm=norm)
fig.colorbar(im, ticks=[-1, -0.5, -0.3, -0.1, +0.1, +0.3, +0.5, +1])

результат будет таким, как ожидалось.

enter image description here

Чтобы воспроизвести точный вид графика морского побережьятогда немного больше работы,

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

corr_matrix = np.array([[0,0,0,0,0],
                        [-.11,0,0,0,0],
                        [-.1,.34,0,0,0],
                        [-0.06,-.1,-.06,0,0],
                        [-0.32,-.08,-.01,.16,0]])

cmap = colors.ListedColormap(["navy", "royalblue", "lightsteelblue", 
                              "beige", "peachpuff", "salmon", "darkred"])
bounds = [-1, -0.5, -0.3, -0.1, 0.1, 0.3, 0.5, 1]
norm = colors.BoundaryNorm(bounds, cmap.N)

mask = np.zeros_like(corr_matrix, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
corr_matrix_masked = np.ma.masked_array(corr_matrix, mask)

fig, ax = plt.subplots()

im = ax.imshow(corr_matrix_masked, cmap=cmap, norm=norm)
fig.colorbar(im, ticks=[-1, -0.5, -0.3, -0.1, +0.1, +0.3, +0.5, +1])

for i in range(corr_matrix_masked.shape[0]):
    for j in range(corr_matrix_masked.shape[1]):
        if not corr_matrix_masked.mask[i,j]:
            val = corr_matrix_masked[i,j]
            color = {True:"w", False:"k"}[np.abs(val) > 0.3]
            ax.text(j,i,"{:.4f}".format(corr_matrix_masked[i,j]), 
                    ha="center", va="center", color=color)

ax.set_title('Correllation Matrix')
for k,v in ax.spines.items():
    v.set_visible(False)
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...