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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:35:13