猿问

如何保持sns.heatmap的对角线中的那些?

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


我希望有人能帮帮忙。


谢谢


温温酱
浏览 349回答 2
2回答

SMILET

我认为你必须检查data.corr(),因为你的代码是正确的,并给出了诊断(见下文)。一个问题是:您使用np.triu但您显示的图片显示 np.tirl。这是我测试过的代码 - 对角线在那里:N = 5A = np.arange(N*N).reshape(N,N)B = np.tril(A)mask =np.zeros_like(A)mask[np.triu_indices_from(mask)] = Trueprint('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]]编辑:补充你可以重新调整面具,例如C = A *maskD = 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 的对角线的第一个元素也是零。编辑:补充2F = np.tril(A,-1)E = np.eye(N)G = E + Fprint('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.]]

繁花不似锦

x轴位置的变化由于我对 seaborn 没有经验,我会使用 matplotlib 来绘制热图(此处为示例),然后使用 matplotlibtwinx()或twiny()将轴放置在您想要的位置(此处为示例)。(我认为这也可以用 seaborn 来完成 - 我只是不知道)
随时随地看视频慕课网APP

相关分类

Python
我要回答