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

如何根据给定x、y坐标及对应值绘制2D直方图/热力图

绘制基于(x,y,value)网格数据的热力图/方格图

要实现你需要的网格方格图(颜色对应value值),可以用Python的Matplotlib或Seaborn库来完成,核心是先将列表格式数据转换为二维网格矩阵,再调用绘图函数。

步骤1:数据预处理

首先把原始的(x,y,value)列表转换为绘图库需要的二维数组:

import numpy as np

# 示例数据
data = [(0, 0, 5), (0, 1, 7), (0, 2, 8),
        (1, 0, 3), (1, 1, 6), (1, 2, 9),
        (2, 0, 2), (2, 1, 4), (2, 2, 1)]

# 拆分坐标与数值
x_coords = [p[0] for p in data]
y_coords = [p[1] for p in data]
values = [p[2] for p in data]

# 获取唯一的x、y轴坐标并排序(确保网格顺序正确)
unique_x = sorted(set(x_coords))
unique_y = sorted(set(y_coords))

# 创建空网格,填充对应数值
grid = np.zeros((len(unique_y), len(unique_x)))
for x, y, val in data:
    x_idx = unique_x.index(x)
    y_idx = unique_y.index(y)
    grid[y_idx, x_idx] = val

方法1:Matplotlib pcolormesh 绘制方格图

适合需要精确控制方格位置和样式的场景:

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6))
# 绘制方格,颜色映射对应value
mesh = plt.pcolormesh(unique_x, unique_y, grid, cmap='viridis')

# 添加颜色条标注数值含义
plt.colorbar(mesh, label='Value')

# 设置坐标轴与标题
plt.xlabel('X Coordinate')
plt.ylabel('Y Coordinate')
plt.title('Grid Heatmap')

# 调整刻度,让每个方格对齐坐标点
plt.xticks([x + 0.5 for x in unique_x], unique_x)
plt.yticks([y + 0.5 for y in unique_y], unique_y)

# 添加白色网格线分隔方格
plt.grid(color='white', linewidth=1)

plt.show()

方法2:Seaborn heatmap 绘制热力图

更简洁,自带标注和样式优化:

import seaborn as sns

plt.figure(figsize=(8, 6))
# 绘制热力图,annot=True会在方格内显示数值
sns.heatmap(grid, annot=True, fmt='d', cmap='viridis',
            xticklabels=unique_x, yticklabels=unique_y)

plt.xlabel('X Coordinate')
plt.ylabel('Y Coordinate')
plt.title('Grid Heatmap with Seaborn')

plt.show()

注意事项

  • 若x/y不是连续整数,只要是离散有序的坐标值,上述代码同样适用
  • 可通过修改cmap参数更换配色,比如coolwarm、plasma、inferno等
  • 不需要方格内数值标注时,去掉Seaborn代码中的annot=True即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:50:25