如何保持对角线上的那些热图?

2024-04-27 00:01:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用sns.热图还有一些问题。这是我的代码:

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,但代码不起作用

我希望有人能帮忙。在

泰铢


Tags: 代码truedatanpzerospltmasklike
2条回答

改变x轴位置

由于我对seaborn没有经验,我会使用matplotlib来绘制热图(here an example),然后使用matplotlib的twinx()或{}将轴放在您想要的位置(here an example)。在

(我想seaborn也能做到——我只是不知道)

我认为您必须检查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()

给予

^{pr2}$

编辑:supelement

你可以把面具修好

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的对角线的第一个元素是0,因为a的对角线的第一个元素也是零。在

编辑: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.]]

相关问题 更多 >