Matplotlib imshow() 热图在错误的地方绘制数据

时间:2021-07-06 18:23:46

标签: python pandas matplotlib imshow

我的代码的重要部分:

# Here I convert the pandas df_heatmap into a pivot table
pivotted_data = df_heatmap.pivot('res1', 'res2', 'SUM')

fig, ax = plt.subplots(figsize=(7, 5))
plot = ax.imshow(pivotted_data)

plot.show()

我一直在尝试使用 Matplotlib 的 imshow() 函数来创建热图。我的相关数据存储在数据框的前 3 列中,df_heatmap 如下所示...

enter image description here

前两列指定坐标并包含从 2 到 56 的每个数字组合,从不重复或包含双打。第三列包含来自多个条目的总和值,并提供热图的颜色数据。

为了将此数据输入 imshow() 函数,我将其转换为数据透视表,其中的一部分如下所示...

enter image description here

这一切正常,但是当我显示图形时,我的值最终会出现错误的坐标。

我在数据框中以黄色突出显示的 SUM 值和数据透视表对应于黄色单元格,我绘制的箭头指向它。虽然根据数据该单元格应该在 (x=33.0, y=7.0) 处,但在实际图中,它被放置在 (x=30.0, y=5.0) 处。您可以看到它与我突出显示的数据相同,因为其 SUM 值相同 (172 ~= 171.98)。

enter image description here

谁能帮我弄清楚为什么我的数据放错了地方?非常感谢!

编辑: 根据@JodyKlymak 的建议,我将数据扩展为从 0 开始表示 res1 而不是 2。这固定了一个轴,但是因为我不能有重复的数字,所以另一个轴仍然关闭。更新后的数据和图如下...

enter image description here

enter image description here

df_heatmap 现在从 (0.0, 1.0) 开始,所以新的 y 位置在正确的位置,但 x 位置仍然偏离 1。

无论我的数据坐标是什么,有什么方法都可以正确绘制此热图? ax.set_xlim() 似乎不适用于此。

0 个答案:

没有答案