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

非规则形状数据的热力图绘制问题求助

解决方案

1. 整理数据为二维网格

首先把一维的xs、ys、corrs转换成二维数组,同时将y > x的区域标记为NaN(绘图时会自动显示空白):

import numpy as np
import matplotlib.pyplot as plt

# 生成x轴基础数据
X = np.linspace(0.1, 5, 25)
corr_grid = []
Y_grid = []

# 循环计算每个x对应的y和相关值(替换成你的实际计算逻辑)
for x in X:
    y_vals = np.linspace(0.01, x, 25)
    Y_grid.append(y_vals)
    # 替换为你的function_to_calculate_corr
    corr_vals = np.random.rand(25)  # 示例随机值
    corr_grid.append(corr_vals)

# 转换为numpy二维数组
X_grid = np.repeat(X[:, np.newaxis], 25, axis=1)
Y_grid = np.array(Y_grid)
corr_grid = np.array(corr_grid)

# 标记y > x的区域为NaN,绘图时自动留白
mask = Y_grid > X_grid
corr_grid[mask] = np.nan

2. 使用pcolormesh绘制热力图

pcolormesh支持不规则网格的精准绘制,直接传入二维的X、Y和对应相关值数组即可:

plt.figure(figsize=(10, 8))
# 绘制热力图,可自定义配色、网格线样式
pcm = plt.pcolormesh(X_grid, Y_grid, corr_grid, cmap='viridis', edgecolors='white', linewidth=0.5)
# 添加颜色条
plt.colorbar(pcm, label='Correlation')
# 绘制y=x对角线,明确区分空白区域
plt.plot(X, X, 'r--', label='y = x')
# 设置轴标签与标题
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Correlation Heatmap (y ≤ x)')
plt.legend()
plt.show()

3. 备选方案:用tripcolor处理非结构化数据

如果不想整理成二维网格,可直接用tripcolor处理一维数据,自动适配空白区域:

plt.figure(figsize=(10, 8))
tc = plt.tripcolor(xs, ys, corrs, cmap='viridis', shading='flat')
plt.colorbar(tc, label='Correlation')
plt.plot(X, X, 'r--')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Correlation Heatmap (y ≤ x)')
plt.xlim(0.1, 5)
plt.ylim(0.01, 5)
plt.show()

关键说明

  • 将y > x区域设为NaN是实现留白的核心,matplotlib会自动跳过这些点的渲染。
  • pcolormesh更适合这种每行y范围不同的网格,能精准对应每个(x,y)的相关值。
  • 若你的function_to_calculate_corr支持向量化运算,建议直接用二维数组计算,避免循环提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:24:52