You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于列表的列表绘制2D直方图?以及如何将列表列表格式的2D直方图数据绘制成2D热力图?

如何将列表形式的2D直方图数据绘制成热力图?

没问题!要把你提供的这种列表嵌套格式的2D直方图数据转换成热力图,咱们用Python的matplotlib或者seaborn库就能轻松实现,我给你详细拆解两种可行的方法:

方法一:Matplotlib + Numpy 手动构建热力图

这种方法适合你需要更灵活控制绘图细节的场景,核心是先把列表数据转换成标准的二维数值矩阵,再用matplotlib绘制。

步骤说明:

  1. 从原始列表中提取x轴、y轴和对应单元格的数值
  2. 确定x和y的唯一值并排序,作为热力图的轴刻度
  3. 创建空的二维矩阵,将对应位置的数值填充进去
  4. 调用matplotlib的绘图函数生成热力图

完整代码示例:

import numpy as np
import matplotlib.pyplot as plt

# 你的原始数据
lst = [[1.0, 1.0, 10], [1.0, 2.0, 28.6], [1.0, 3.0, 26.93], [1.0, 4.0, 26.93],
       [2.0, 1, 6], [2.0, 2.0, 4], [2.0, 3.0, 67], [2.0, 4, 23],
       [3.0, 1.0, 12], [3.0, 2.0, 65], [3.0, 3.0, 33], [3.0, 4.0, 53]]

# 提取x、y和对应的数值
x_values = [item[0] for item in lst]
y_values = [item[1] for item in lst]
cell_values = [item[2] for item in lst]

# 获取唯一的x、y值并排序,作为轴刻度
unique_x = sorted(list(set(x_values)))
unique_y = sorted(list(set(y_values)))

# 创建空的热力图数据矩阵
heatmap_matrix = np.zeros((len(unique_x), len(unique_y)))

# 填充矩阵数据
for item in lst:
    x_idx = unique_x.index(item[0])
    y_idx = unique_y.index(item[1])
    heatmap_matrix[x_idx, y_idx] = item[2]

# 绘制热力图
plt.figure(figsize=(8, 6))
# 使用pcolormesh绘制,参数分别是y轴刻度、x轴刻度、数据矩阵
im = plt.pcolormesh(unique_y, unique_x, heatmap_matrix, cmap='viridis')
# 添加颜色条,标注数值含义
plt.colorbar(im, label='单元格数值')
# 设置轴标签和标题
plt.xlabel('Y轴')
plt.ylabel('X轴')
plt.title('基于列表数据的2D热力图')
# 设置轴刻度与数据匹配
plt.xticks(unique_y)
plt.yticks(unique_x)

plt.show()

方法二:Seaborn 快速绘制热力图

如果你想要更简洁的代码和更美观的默认样式,seaborn库是更好的选择,它可以直接处理我们构建好的矩阵,还能一键添加数值标注。

完整代码示例:

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

# 复用前面的unique_x、unique_y和heatmap_matrix
# (如果是单独运行,需要把前面提取数据、构建矩阵的代码也加上)

plt.figure(figsize=(8, 6))
# sns.heatmap直接生成热力图
sns.heatmap(heatmap_matrix, 
            annot=True,  # 显示每个单元格的数值
            fmt='g',     # 用通用格式显示数值,避免科学计数法
            cmap='viridis',
            xticklabels=unique_y,  # 设置x轴刻度标签
            yticklabels=unique_x)  # 设置y轴刻度标签
plt.xlabel('Y轴')
plt.ylabel('X轴')
plt.title('Seaborn绘制的2D热力图')

plt.show()

一些实用小技巧:

  • 如果你的数据存在缺失的(x,y)组合,矩阵中对应的位置会默认填充0,要是需要标记缺失值,可以把这些位置设为np.nan,绘图时会自动留白
  • cmap参数可以替换成不同的配色方案,比如'coolwarm'(冷暖色)、'plasma'(渐变色)等,根据你的需求选择
  • annot=True可以显示每个单元格的具体数值,方便快速查看细节;如果不需要标注,把这个参数去掉即可

内容的提问来源于stack exchange,提问作者jeny ericsoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:24:10