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

如何制作刻度线性、色彩非线性的Gnuplot色条?

问题描述

我有一份数据文件,大部分数据分布在[-5:5]区间,还有部分极值数据数值约为-20。用线性色标绘图时,小量级数据无法清晰显示。我尝试过基于tanh()函数的非线性色标,想放大展示小值数据,同时在不使色标饱和的前提下呈现极值数据。

之前的Gnuplot脚本及结果如下:

#!/usr/bin/env gnuplot

# width and height in inches; pixes per inch
w = 12.0 
h = 8.0 
ppi = 150 
set term pngcairo enh col size (w*ppi),(h*ppi) font ",18" 
set output 'mwe.png'

# nonlinear cb scale functions, z in [-zmax,zmax] 
beta = 3.0 
scale(z,zmax) = tanh(beta * (z/zmax)) 
invscale(z,zmax) = zmax * (atanh(z) / beta)

set pm3d map interp 0,0 
set palette maxcol 0 
set xrange [-90:90] 
set yrange [80:200] 
set xtics -90,45,90

set nonlinear cb via scale(z,20) inverse invscale(z,20) 
set cbrange [-20:20] 
set cbtics -20,10,20

splot 'data.txt' us 1:2:7

绘图结果

目前脚本实现的是色条刻度非线性、色彩线性的效果,我希望改为色条刻度线性、色彩本身非线性(即拉伸色彩而非刻度),请问是否可行?


解决方案

完全可行,核心思路是直接对数据的Z值应用tanh()非线性变换,再将变换后的值映射到线性色标上——这样色条刻度保持线性,色彩会根据变换函数拉伸小值区间的分辨率,同时极值不会触发色标饱和。

修改后的脚本如下:

#!/usr/bin/env gnuplot

# width and height in inches; pixels per inch
w = 12.0 
h = 8.0 
ppi = 150 
set term pngcairo enh col size (w*ppi),(h*ppi) font ",18" 
set output 'mwe_nonlinear_color.png'

# 非线性色彩映射函数:对原始Z值做tanh变换
beta = 3.0
zmax = 20.0
color_transform(z) = tanh(beta * (z/zmax))

set pm3d map interp 0,0 
set palette maxcol 0 
set xrange [-90:90] 
set yrange [80:200] 
set xtics -90,45,90

# 色标范围对应tanh的输出区间[-1,1],手动绑定刻度标签与原始数据值
set cbrange [-1:1]
set cbtics ( \
    "-20" color_transform(-20), \
    "-10" color_transform(-10), \
    "0" color_transform(0), \
    "10" color_transform(10), \
    "20" color_transform(20) \
)

# 绘图时对原始Z值(第7列)应用色彩变换
splot 'data.txt' us 1:2:(color_transform($7))

关键改动说明:

  1. 移除非线性色标设置:删掉set nonlinear cb,改为直接在绘图阶段对原始Z值做tanh()变换,用变换后的值作为色彩映射的依据。
  2. 线性色条刻度绑定:色标范围设为tanh()的输出范围[-1,1],然后手动将色条刻度标签(显示原始数据的-20、-10等数值)绑定到对应原始值经过变换后的位置,确保刻度视觉上线性排列。
  3. 小值区间色彩拉伸:由于tanh()在接近0的区间变化率更高,原始数据中[-5,5]的小值会被映射到色标中更宽的区间,色彩差异更明显;而极值-20会被映射到接近-1的位置,不会导致色标饱和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 17:14:51