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

GNUPlot splot处理超范围值:无数据z值自定义配色及图例设置

解决方案

直接修改gnuplot脚本即可实现需求,修改后不会改变原有0~60有效数值区域的配色逻辑,无效值区域固定显示为紫色,色条同步增加无结果标注。

修改后完整可运行脚本

set terminal png large size 1600,\
1200 font arial 24 crop
set output "map.png"

# 扩展调色板:保留原有0~60区间的绿-黄-红渐变,新增61位置绑定紫色作为无结果色
set palette model RGB defined (\
    0  "dark-green",\
    8.6 "forest-green",\
    17.1 "green",\
    25.7 "light-green",\
    34.3 "dark-yellow",\
    42.9 "yellow",\
    51.4 "red",\
    60 "dark-red",\
    61 "purple"\
)

set xrange[-180.00: 180.00]
set yrange[ -90.00:  90.00]
# 调整z轴/色条范围,覆盖到无效值映射位61,避免值被截断显示为白色
set zrange[0:61]
set cbrange[0:61]

set grid
set pm3d map
set xlabel "Longitude [deg]"
set ylabel "Latitude [deg]"
unset key
set cblabel "Time [h]"
# 配置色条刻度:保留0~60每10小时的常规刻度,在61位置添加无结果标注
set cbtics 0,10,60
set cbtics add ("无结果" 61)
set cbmtics off # 关闭色条次要刻度,避免显示混乱

# 读取数据时增加判断:z值为9999时映射为61,否则保留原始z值
splot "output\\map.dat" u 5:6:($8 == 9999 ? 61 : $8),\
"input\\world.dat" u 1:2:(0.00) w l lw 1 lt -1

核心修改点说明

  • 无效值映射:读取热力图数据时通过三元运算符$8 == 9999 ? 61 : $8做值替换,将9999的超大无效值统一转换为仅比有效上限高1的固定值61,既不会拉伸色阶导致有效区域配色失真,也不会因值超出zrange范围被截断为白色。
  • 调色板适配:原有8个色阶按比例映射到0~60的有效数值区间,和修改前的显示效果完全一致;新增61位置绑定紫色,因为有效数据最高为60、无效数据固定为61,两个区间无过渡值,不会出现多余渐变。
  • 标注配置:直接在色条对应紫色块的位置添加“无结果”刻度标注,和原有“Time [h]”的色条说明逻辑统一,不需要额外新增独立图例。
  • 边界逻辑兼容:原有世界海岸线绘制逻辑完全保留,边界线使用固定黑色线型,不受调色板配置影响。

如果需要更换无结果区域的颜色,只需要修改调色板定义中61位置对应的颜色值即可,比如改成灰色、黑色都可以直接替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:21:35