Как сохранить те в Диагонали sns.heatmap? - PullRequest
0 голосов
/ 01 марта 2019

Я хочу построить Матрицу корреляции с sns.heatmap и задать несколько вопросов.Это мой код:

plt.figure(figsize=(8,8)) mask =np.zeros_like(data.corr()) mask[np.triu_indices_from(mask)] = True sns.heatmap(data.corr(), mask=mask, linewidth=1, annot=True, fmt=".2f",cmap='coolwarm',vmin=-1, vmax=1) plt.show()

и вот что я получаю: [Матрица корреляции] [1] [1]: https://i.stack.imgur.com/DX2oN.png \

Теперь у меня есть несколько вопросов:

1) Как я могу сохранить их в диагонали?

2) Как я могу изменить положение оси X?

3) Я хочу, чтобы цветовая шкала была от 1 до -1, но код не работает

Надеюсь, кто-то может помочь.

Thx

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Изменение положения оси x

Поскольку у меня нет опыта с морским рогом, я бы использовал matplotlib для построения тепловой карты ( здесь пример ) затем используйте Matplotlib twinx() или twiny(), чтобы разместить ось там, где вы хотите ее разместить ( здесь пример ).

(я думаю, что это можно сделать с Seabornтоже - я просто этого не знаю)

0 голосов
/ 01 марта 2019

Я думаю, что вы должны проверить data.corr(), потому что ваш код правильный и выдает диагноз (см. Ниже).Один вопрос: вы используете np.triu, но изображение, которое вы показываете, показывает np.tirl.

Вот код, который я тестировал - диагональ есть:

N = 5
A = np.arange(N*N).reshape(N,N)

B = np.tril(A)

mask =np.zeros_like(A)
mask[np.triu_indices_from(mask)] = True

print('A'); print(A); print()
print('tril(A)'); print(B); print()
print('mask'); print(mask); print()

дает

A
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]

tril(A)
[[ 0  0  0  0  0]
 [ 5  6  0  0  0]
 [10 11 12  0  0]
 [15 16 17 18  0]
 [20 21 22 23 24]]

mask
[[1 1 1 1 1]
 [0 1 1 1 1]
 [0 0 1 1 1]
 [0 0 0 1 1]
 [0 0 0 0 1]]

edit: suplement

Вы можете перенастроить маску, например,

C = A *mask
D = np.where(C > 1, 1,C)
print('D'); print(D)

дает

D
[[0 1 1 1 1]
 [0 1 1 1 1]
 [0 0 1 1 1]
 [0 0 0 1 1]
 [0 0 0 0 1]]

Первый элемент диагонали D теперь равен нулю, так как первый элемент диагонали A тоже равен нулю.

edit: suplement 2

F = np.tril(A,-1)
E = np.eye(N)
G = E + F

print('F'); print(F); print()
print('E'); print(E); print()
print('G'); print(G); print()

т

F
[[ 0  0  0  0  0]
 [ 5  0  0  0  0]
 [10 11  0  0  0]
 [15 16 17  0  0]
 [20 21 22 23  0]]

E
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]

G
[[ 1.  0.  0.  0.  0.]
 [ 5.  1.  0.  0.  0.]
 [10. 11.  1.  0.  0.]
 [15. 16. 17.  1.  0.]
 [20. 21. 22. 23.  1.]]
...