根据特定的调色板改变Gnuplot中的填充颜色

时间:2015-07-02 07:59:25

标签: gnuplot fill

我想用Gnuplot填充一些封闭的曲线。这是我到目前为止的结果。

enter image description here

不错。我使用过这段代码:

plot \
'fort.40' u 1:2 smooth bezier w filledcurves lt 1 lc 4 lw 3 t 't=100 s' ,\
'fort.30' u 1:2 smooth bezier w filledcurves lt 1 lc 3 lw 3 t 't=20 s' ,\
'fort.20' u 1:2 smooth bezier w filledcurves lt 1 lc 2 lw 3 t 't=1 s' ,\
'fort.10' u 1:2 smooth bezier w filledcurves lt 1 lc 1 lw 3 t 't=0'

然而,我真正想要的是绘制一百条这样的曲线(对于物理学家来说,我想要的是说明一个像双摆的相空间中圆的时间演化)。每条闭合曲线存储为两列,曲线坐标位于不同的ASCII文件中。如您所见,我已经实现了上图,手工设置了四种不同的填充颜色。但是现在我想将它概括为按照某种调色板平滑过渡颜色。这个想法是颜色给出了关于图中隐含的第三个维度的暗示:时间。

您是否知道是否可以使用符合特定调色板的填充颜色而不是固定颜色?在最坏的情况下,我可以定义100个填充样式(我在shell脚本中创建代码,因此自动化过程相对容易),但我仍然不知道是否可以根据调色板分配颜色而不是手工给出的颜色。

编辑:感谢@Christoph的出色回答,这是最终的输出。我把它留在这里只是为了说明Gnuplot有多强大。

enter image description here

1 个答案:

答案 0 :(得分:0)

filledcurves绘图风格不支持lc palettelc [rgb] variable,这是人们用来着色的方法。

对于filledcurves,您可以使用lc palette frac <value>,其中<value>[0:1]范围内的数字,用于指定当前调色板中的小数位置,其中颜色为从。这需要您知道您正在绘制的文件数量:

set style fill solid noborder
plot \
'fort.40' u 1:2 smooth bezier w filledcurves lc palette frac 1 t 't=100 s' ,\
'fort.30' u 1:2 smooth bezier w filledcurves lc palette frac 0.6667 t 't=20 s' ,\
'fort.20' u 1:2 smooth bezier w filledcurves lc palette frac 0.3333 t 't=1 s' ,\
'fort.10' u 1:2 smooth bezier w filledcurves lc palette frac 0 t 't=0'

迭代你可以使用的文件

files = 'fort.40 fort.30 fort.20 fort.10'
times = '100     20      1       0'
N = words(files)

set style fill solid noborder
plot for [i=1:words(files)] word(files, i) u 1:2 smooth bezier with filledcurves lc palette frac (N-i)/(N-1.0) t sprintf('t=%s s', word(times, i)