我的代码的重要部分:
# 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
如下所示...
前两列指定坐标并包含从 2 到 56 的每个数字组合,从不重复或包含双打。第三列包含来自多个条目的总和值,并提供热图的颜色数据。
为了将此数据输入 imshow()
函数,我将其转换为数据透视表,其中的一部分如下所示...
这一切正常,但是当我显示图形时,我的值最终会出现错误的坐标。
我在数据框中以黄色突出显示的 SUM 值和数据透视表对应于黄色单元格,我绘制的箭头指向它。虽然根据数据该单元格应该在 (x=33.0, y=7.0) 处,但在实际图中,它被放置在 (x=30.0, y=5.0) 处。您可以看到它与我突出显示的数据相同,因为其 SUM 值相同 (172 ~= 171.98)。
谁能帮我弄清楚为什么我的数据放错了地方?非常感谢!
编辑: 根据@JodyKlymak 的建议,我将数据扩展为从 0 开始表示 res1 而不是 2。这固定了一个轴,但是因为我不能有重复的数字,所以另一个轴仍然关闭。更新后的数据和图如下...
df_heatmap
现在从 (0.0, 1.0) 开始,所以新的 y 位置在正确的位置,但 x 位置仍然偏离 1。
无论我的数据坐标是什么,有什么方法都可以正确绘制此热图? ax.set_xlim()
似乎不适用于此。