我使用matplotlib和seaborn的热图遇到了一个小问题,我无法弄清问题是什么。
我想在热图上显示我的数据,以及每行的值的总和;但是我不能将它添加到我的初始数据的右侧,因为它们的值比我的其他数据高得多/低得多,并且使热图不可读。
为此,我想在第一个热图的右侧绘制第二个热图,仅显示每行的总和。
我做了以下事情:
fig,(ax1,ax2) = plt.subplots(1,2)
ax1=sns.heatmap(np.transpose(res)[::-1], cmap="RdBu_r",center=0,annot=True,fmt=".1f",xticklabels=week_arr,yticklabels=tol_arr[::-1])
ax1.set_xlabel("Week")
ax1.set_ylabel("Tolerance")
ax2 = sns.heatmap(np.transpose([np.sum(res,axis=0)]),cmap="RdBu_r",center=0)
plt.show()
但是我只在第二把斧上得到一张热图,第一张没有任何数据。
有人知道为什么第一个热图不会出现在左侧子图中吗?
非常感谢
PS:测试数据
res=
[[-260.19999999999982,
-383.40000000001874,
-171.50000000001037,
-157.10000000000693,
-223.90000000001069],
[-333.29999999999035,
-288.10000000002884,
-387.90000000000896,
-287.6000000000015,
-267.29999999999865],
[-162.39999999999506,
-135.50000000002248,
-95.299999999992977,
31.700000000002859,
118.90000000000114],
[-464.39999999999111,
-386.20000000002841,
-305.20000000003597,
-162.40000000004926,
-225.00000000001705],
[-427.69999999996594,
-424.39999999998417,
-282.80000000000302,
-336.90000000000407,
-388.89999999999424]]
答案 0 :(得分:1)
使用plt.subplots()
将sns.heatmap()
创建的轴对象传递给ax
。这就是Seaborn如何知道每个情节使用哪个轴。
fig,(ax1,ax2) = plt.subplots(1,2)
sns.heatmap(np.transpose(res)[::-1], cmap="RdBu_r", ax=ax1) # <-- axis arg
ax1.set_xlabel("Week")
ax1.set_ylabel("Tolerance")
sns.heatmap(np.transpose([np.sum(res,axis=0)]),cmap="RdBu_r", ax=ax2)
您目前设置的方式是,您将ax1
重新分配为来自heatmap()
的输出,它实际上并未在{ax1
之间建立链接1}}绘制表面和要在其上绘制的热图。