首页 > 解决方案 > 如何使用二维数组的索引通过 matplotlib/seaborn 生成热图?

问题描述

我有一个 2D numpy 数组 A ,其中包含与每个点对应的强度值。我正在尝试为这些点生成热图。例如,如果 A[3,0] 处的值为 230,那么我希望 x 值为 3、y 值为 0 的正方形对应于 230 的值。

我试过简单地使用 Seaborn 热图功能。

import numpy as np
import seaborn as sns

np.random.seed(0)
A = np.random.uniform(0,500,(4,3))
sns.heatmap(A, square=True)

其中 A 只是一个 4x3 numpy 随机值数组。然而,输出是一个看起来像矩阵 A 的区域。

在此处输入图像描述

这是一个 4x3 区域,其中每个点对应于矩阵 A 中的一个点(如果它被写出)。但我不确定如何获得它,以便我使用矩阵的实际索引作为点创建热图。考虑到的热图实际上是 3x4,类似于坐标平面的一部分,x 值为 [0,1,2,3],y 值为 [0,1,2]。

对不起,如果我解释得不好。我可能严重误解了热图的工作原理,但是有没有办法做到这一点(有或没有热图功能)?谢谢阅读。

标签: pythonnumpymatplotlibseaborn

解决方案


我认为您不会混淆热图是什么,而是数组的索引代表什么。在二维数组中,第一个索引是行,第二个索引是列。笛卡尔 x 和 y 坐标没有明确的概念。

也就是说,您可以通过创建数组transpose的热图,然后设置 x 轴和 y 轴的限制,使 (0, 0) 位于左下角来获得所需的内容。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(0)
A = np.random.uniform(0,500,(4,3))
sns.heatmap(A.T, square=True)
plt.xlim(0, A.shape[0])
plt.ylim(0, A.shape[1])
plt.show()

在此处输入图像描述


推荐阅读