Gnuplot绘制渐变色彩单线条问题求助
实现Gnuplot单线条颜色渐变的正确方法
你原代码无法生成渐变线条的核心问题是:Gnuplot的with lines样式默认会采用第一个数据点的颜色绘制整条线段,不会根据每个点的取值逐一分配颜色。要实现单条线的颜色渐变,需要调整绘图逻辑,让每个线段的颜色对应其数据点的数值。
修正后的可用代码
# 定义与cbrange匹配的自定义调色板 set palette defined (100 '#01748D', 145 '#22D6CC', 190 '#68DEFF', 235 '#2E5DD1', \ 280 '#611EBA', 325 '#9349DF', 350 '#FA6FD3') set cbrange [100:350] set colorbox horiz user origin 0.22,0.65 size 0.335,0.04 set cbtics 100 offset 0,2.3 set format cb '\scriptsize{$%1.0f$}' set palette maxcolor 40 # 设置线条样式:线宽3,隐藏点标记 set style line 1 lw 3 pt 0 # 使用linespoints样式实现渐变线条 plot 'dane.dat' using 1:2:1 with linespoints ls 1 lc palette notitle
关键细节说明
- 调色板映射优化:直接将调色板的数值点与
cbrange(100-350)对应,无需手动归一化x值,Gnuplot会自动完成数值到颜色的映射。 - 绘图样式选择:使用
with linespoints替代with lines,该样式会为每个数据点单独分配颜色,再用对应颜色的线段连接相邻点,从而形成渐变效果;通过pt 0隐藏点标记,只保留渐变线条。 - 新版本兼容:若使用Gnuplot 5.0及以上版本,也可直接用
with lines lc palette,但需确保开启set termoption enhanced,且数据点足够密集以保证渐变效果平滑。
旧版本Gnuplot替代方案
如果上述方法在旧版本中无效,可采用分段绘制的方式,逐个绘制相邻数据点的线段并指定颜色:
set palette defined (100 '#01748D', 145 '#22D6CC', 190 '#68DEFF', 235 '#2E5DD1', \ 280 '#611EBA', 325 '#9349DF', 350 '#FA6FD3') set cbrange [100:350] set colorbox horiz user origin 0.22,0.65 size 0.335,0.04 set cbtics 100 offset 0,2.3 set format cb '\scriptsize{$%1.0f$}' set palette maxcolor 40 # 循环绘制每一段相邻点的线段 plot for [i=0:*] 'dane.dat' every ::i::i+1 using 1:2:(column(1)) with lines lw 3 lc palette notitle
该循环会依次读取每一对相邻数据点,用第一个点的x值对应颜色绘制线段,最终拼接出渐变线条。
内容的提问来源于stack exchange,提问作者Lilla_mu
相关产品推荐
相关产品推荐

