如何在Python中利用一维数组生成二维热力图?
基于一维数组生成两种热力图的实现方案
形式一:三角堆叠式热力图
步骤说明
- 将一维数组拆分为长度依次为1、2、3的子数组,顺序为:原数组最后1个元素作为第一行,中间2个元素作为第二行,前3个元素作为第三行。
- 补全为矩形矩阵(用
NaN填充空白位置,避免绘图报错)。 - 使用可视化库绘制热力图并添加标签。
代码实现
import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 自定义函数输出的一维数组 arr = np.array([0.4, 0.6, 0.2, 0.3, 0.9, 0.7]) # 拆分重组为三角结构 row1 = arr[-1:] # [0.7] row2 = arr[3:5] # [0.3, 0.9] row3 = arr[:3] # [0.4, 0.6, 0.2] # 补全为3x3矩形矩阵,空白处用NaN填充 heatmap_data = np.full((3, 3), np.nan) heatmap_data[0, 2] = row1[0] heatmap_data[1, 1:] = row2 heatmap_data[2, :] = row3 # 绘制热力图 plt.figure(figsize=(6, 4)) ax = sns.heatmap(heatmap_data, annot=True, cmap='YlGnBu', fmt='.1f', cbar=False, linewidths=1, linecolor='white') # 添加标签 ax.set_title('形式一:三角堆叠热力图') ax.set_yticklabels(['行1', '行2', '行3']) ax.set_xticklabels(['列1', '列2', '列3']) plt.show()
形式二:对称全矩阵热力图
步骤说明
- 计算矩阵维度:一维数组长度为6,对应
n*(n-1)/2=6,解得n=4(即4×4矩阵)。 - 创建对角线为1的对称矩阵,将一维数组元素按示例顺序填充到上三角区域,再镜像到下三角区域。
- 绘制热力图并添加样本标签。
代码实现
import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 自定义函数输出的一维数组 arr = np.array([0.4, 0.6, 0.2, 0.3, 0.9, 0.7]) # 初始化4×4对角矩阵(对角线为1) n = 4 heatmap_data = np.eye(n) # 定义上三角填充位置,按示例顺序赋值 upper_positions = [(0,1), (0,2), (0,3), (1,2), (1,3), (2,3)] # 对应原数组的索引顺序:5,3,0,4,1,2 target_values = arr[[5,3,0,4,1,2]] for idx, (i,j) in enumerate(upper_positions): heatmap_data[i,j] = target_values[idx] heatmap_data[j,i] = target_values[idx] # 镜像到下三角 # 绘制热力图 plt.figure(figsize=(6, 6)) ax = sns.heatmap(heatmap_data, annot=True, cmap='YlOrRd', fmt='.1f', cbar=True, linewidths=1, linecolor='white') # 添加标签 ax.set_title('形式二:对称全矩阵热力图') ax.set_yticklabels(['样本A', '样本B', '样本C', '样本D'], rotation=0) ax.set_xticklabels(['样本A', '样本B', '样本C', '样本D']) plt.show()
适配说明
- 若一维数组长度变化,只需重新计算矩阵维度
n(满足n*(n-1)/2 = len(arr)),并调整元素填充的索引顺序即可。 - 热力图的颜色映射、标注格式等可根据需求自定义修改。
内容的提问来源于stack exchange,提问作者Andy Junghyun Kim
相关产品推荐
相关产品推荐

