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

Python读取CSV绘制自定义色阶平滑热力图问题排查

平滑热力图实现方案

原代码问题排查

原代码同时存在语法错误和逻辑错误,是输出异常直线的核心原因:

  • 语法类错误:多处赋值符号错写为减号(Z2 - ...应为Z2 = ...)、方法调用漏括号(data.ravel应为data.ravel())、参数拼写错误(cmaprcm.jet应为cmap=cm.jet)、变量大小写混用(定义大写X后调用小写x)、语句未正确断行(z = ZD.ravel gridsize=10为两个独立语句)
  • 逻辑类错误:
    • 照搬官方测试demo的模拟数据逻辑,bivariate_normal是用来生成二维正态分布测试数据的函数,不需要套用到自有CSV真实数据上
    • 向bivariate_normal传入的x、y参数为完全相同的data数组,最终计算得到的坐标满足x=y,自然只会输出一条直线
    • ZD = Z2 - 21为笔误,原demo逻辑为Z2-Z1
    • hexbin本身是六边形分箱绘图接口,输出为蜂窝状色块,无法实现连续平滑的热力图效果

正确实现代码

要实现无硬方块边缘、数值越高颜色越暖(0对应蓝色、高值对应暖红/橙色)的平滑热力图,可通过「原始网格数据+高斯平滑+插值渲染」实现,无需生成模拟正态数据或调用hexbin接口:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter
from matplotlib import cm

# 读取CSV数据,根据自己的文件格式调整读取参数
# 若CSV无表头、纯数值存储:df = pd.read_csv("your_file.csv", header=None).values
df = pd.read_csv("your_file.csv", index_col=0)
z_raw = df.values

# 生成坐标网格,若CSV自带x/y轴坐标,替换为对应实际值即可
x = np.arange(z_raw.shape[1])
y = np.arange(z_raw.shape[0])
xx, yy = np.meshgrid(x, y)

# 高斯平滑处理,sigma越大平滑效果越强,建议在1-3区间调试
z_smoothed = gaussian_filter(z_raw, sigma=1.8)

# 绘图配置
plt.figure(figsize=(8, 6))
im = plt.pcolormesh(
    xx, yy, z_smoothed,
    cmap=cm.coolwarm, # 冷蓝到暖红的色阶,符合映射规则
    vmin=0, vmax=20, # 固定色阶范围:0对应蓝色,20对应最高暖色调
    shading='gouraud' # *关键参数*:实现颜色插值过渡,消除方块硬边缘
)

plt.colorbar(im, label='数值')
plt.xlim(x.min(), x.max())
plt.ylim(y.min(), y.max())
plt.tight_layout()
plt.show()

参数调整提示

  • 平滑度不符合预期时,调整sigma值:数值越大画面越平滑,数值越小越接近原始方块效果
  • 色阶风格可通过替换cmap参数调整,比如使用cm.RdYlBu_r可实现蓝-黄-红的更鲜明冷暖递进
  • 若CSV存储的是离散点数据而非网格数据,可将高斯平滑替换为scipy.interpolate.Rbf径向基插值,生成连续网格后再绘图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:00:45