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

插值热力图出现异常低值误报的原因及解决方法

问题解决方案

问题根源

你的测试数据是散点形式(每个(x,y)对应单个z值),而interp2d要求输入的x、y为严格单调的网格坐标数组,对应的z是二维网格数据。当大部分z值为1、仅一个点异常时,直接传入散点数据会触发插值算法的数值不稳定,导致外推区域出现0值误报和RuntimeWarning。

修改后的代码

import pandas as pd
import numpy as np
from scipy.interpolate import interp2d
import matplotlib.pyplot as plt

# 读取Excel文件(替换为你的文件路径)
df = pd.read_excel("test_data.xlsx")
x = df['x'].values
y = df['y'].values
z = df['z'].values

# 生成规则网格(根据你的数据实际范围调整)
x_grid = np.linspace(x.min(), x.max(), 100)
y_grid = np.linspace(y.min(), y.max(), 100)
X, Y = np.meshgrid(x_grid, y_grid)

# 初始化网格z值为1(匹配数据基线)
Z_grid = np.ones_like(X)

# 将原始数据点映射到网格对应位置
for xi, yi, zi in zip(x, y, z):
    x_idx = np.argmin(np.abs(x_grid - xi))
    y_idx = np.argmin(np.abs(y_grid - yi))
    Z_grid[y_idx, x_idx] = zi

# 创建插值函数,设置fill_value避免外推出现0值
interp_func = interp2d(x_grid, y_grid, Z_grid, kind='cubic', fill_value=1)
Z_interp = interp_func(x_grid, y_grid)

# 绘制热力图
plt.figure(figsize=(8,6))
plt.contourf(X, Y, Z_interp, cmap='viridis')
plt.colorbar(label='z值')
plt.scatter(x, y, c='red', marker='x', label='原始数据点')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('插值热力图')
plt.show()

关键修改说明

  • 构造规则网格:先创建均匀分布的x/y网格,初始化所有z值为1,匹配你的数据基线
  • 映射原始数据点:将(5,5)处的z=9准确放置到网格对应位置,保证插值的基础数据正确
  • 限制插值边界:通过fill_value=1强制超出原始数据范围的区域填充为1,彻底避免0值误报
  • 选用稳定插值方法:使用kind='cubic'立方插值,比默认线性插值的数值稳定性更好,减少RuntimeWarning

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:54:20