Gnuplot中set dgrid3d cauchy平滑参数的控制方法
问题根源
你当前用的set dgrid3d 500,500 cauchy 0.001,0.001配置里,0.001,0.001这两个Cauchy核尺度参数设置得远小于数据集的实际坐标跨度,触发了dgrid3d的加权归一化副作用:对于远离所有真实离散点的网格位置,所有数据点的核权重几乎相等,插值结果会直接趋近于全数据集z值的全局平均值,自然会把背景抬到中高值区间,出现背景值和真实高值点量级接近的问题。
可落地方案(无需替换Cauchy核)
方案1:匹配数据尺度调整带宽参数
先统计x、y方向上相邻离散数据点的平均间距,把dx、dy设置为这个平均间距的1.22倍即可,不要设置成远小于点间距的数值。举个例子:如果x轴范围是01,离散点平均x向间距是0.05,就把dx设为0.07~0.1,dy按y方向的平均点间距对应设置。
带宽和点间距匹配后,远离数据点的位置核权重会快速衰减,不会出现所有点权重均等的平均效应,背景值会自然回落至低值区间。方案2:增加核截断半径,直接消除远场权重贡献
调整带宽后如果还是觉得背景值偏高,可以切换到核密度估计模式,给Cauchy核加距离截断,超出截断半径的点不参与插值计算:# 示例:dx=0.1、dy=0.1,3倍带宽外的点权重直接置0 set dgrid3d 500,500 cauchy 0.1,0.1 kdensity 3这个参数调整不会破坏Cauchy核本身平缓的平滑过渡效果,也不会出现硬边缘,同时远场网格因为没有远处点的权重贡献,数值会直接落到色卡的蓝色低值区间,是改动最小见效最快的方案。
方案3:掩膜后处理(可控性最高)
如果前两种参数调整达不到你要的效果,可以对插值结果做一层掩膜处理:- 先把dgrid3d插值生成的网格数据输出到临时文件
- 逐网格点计算其到最近原始离散点的欧氏距离
- 距离超过设定阈值的网格点,z值直接替换为全数据集的z最小值
- 读取处理后的临时文件绘制热图,最后叠加原始离散点层即可
这个方案可以完全自定义背景的压低程度,数据点周边的Cauchy平滑效果也能100%保留。
避坑提示
不要把dx、dy设置得比原始数据的坐标精度还小(比如你当前用的0.001,如果原始数据坐标只保留2位小数,这个参数完全不合理),除了抬升背景,还会在插值结果里引入大量无意义的伪影。Cauchy核的尾部衰减特性比gauss、exp核更平缓,过渡效果更自然,不需要换核,参数调对就能满足要求。
内容的提问来源于stack exchange,提问作者aadeez

