在同一个matplotlib图上绘制几个seaborn热图的问题

时间:2017-12-29 04:33:47

标签: python python-3.x matplotlib seaborn

我使用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]]

1 个答案:

答案 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)

heatmap

您目前设置的方式是,您将ax1重新分配为来自heatmap()输出,它实际上并未在{ax1之间建立链接1}}绘制表面和要在其上绘制的热图。