如何在Gnuplot中仅将颜色设为对数刻度(色柱数值及刻度不变)
GNUPLOT实现颜色对数映射但色柱刻度保持线性的方法
要实现颜色按对数刻度分配,但色柱(colorbar)的数值和刻度保持原始线性范围,有两种简洁的实现方式:
方法一:手动转换数据z值+自定义色柱刻度
直接对数据的颜色值做对数转换,同时固定色柱显示原始线性刻度:
set size square 1,1 set cbrange [0:2] # 定义对数转换函数,加极小值避免0值触发对数错误 log_transform(x) = log10(x + 1e-8) set pm3d map # 强制色柱显示原始线性刻度 set cbtics ("0" 0, "0.1" 0.1, "0.5" 0.5, "1" 1, "1.5" 1.5, "2" 2) # 调色板节点需转换为对数后的数值(对应原始分界点的对数) set palette defined (-8 'gray30', -0.1249 'gray20', 0.1303 'cyan', 0.3010 'cyan') # 绘制时对第三列(颜色值)应用对数转换 splot 'Sq.dat' using 1:2:(log_transform($3)) with pm3d
方法二:开启调色板对数刻度+关闭色柱对数显示
利用gnuplot内置的调色板对数功能,同时强制色柱保持线性刻度显示,无需手动转换数据:
set size square 1,1 set cbrange [0:2] set pm3d map # 让颜色映射使用对数刻度 set palette logscale # 关闭色柱的对数刻度显示,保持线性刻度 set logscale cb off # 设置色柱刻度为原始线性区间的节点 set cbtics 0, 0.5, 2 # 调色板节点直接用原始线性数值即可 set palette defined (0 'gray30', 0.75 'gray20', 1.35 'cyan') splot 'Sq.dat' with pm3d
注意事项
- 若数据包含0值,方法一中的
1e-8偏移可避免对数计算报错;方法二中gnuplot会自动将0值映射到调色板最低端 - 方法二更简洁,推荐优先使用,仅当需要更精细控制颜色映射时选择方法一
内容的提问来源于stack exchange,提问作者koy
相关产品推荐
相关产品推荐

