在数据上结合 acspline 和 filledcurve

Combining acspline with filledcurve on data

我知道如何使用 filledcurveusing 1:2:3 来填充第 2 列和第 3 列描述的曲线之间的区域。

我也知道如何使用带 using 1:2:(0.1) 的 acsplines 平滑单个曲线(0.1 是每个点的平滑权重)。

但我未能将两者结合起来,即填充两条平滑曲线之间的区域。我尝试的所有变体都会给我错误消息,例如 duplicated or contradicting arguments in datafile options.

这是我试过的:

plot 'datafile' using 1:2:3:(0.1):(0.1) smooth acs with lines
plot 'datafile' using 1:2:(0.1):3:(0.1) smooth acs with lines

这种组合可能吗?那么语法如何?

我猜你不能将 smooth acsplinewith filledcurves 结合起来,但我也不知道为什么这不可能。 好吧,作为一种解决方法,先将 smooth acspline 曲线绘制成数据 table,然后再绘制 with filledcurves.

代码:

### filled acspline curve
reset session

$Data <<EOD
1 2
2 4
3 3
4 1
EOD

# plot your acspline data into a table
set table $ACSpline
    plot $Data u 1:2 smooth acspline
unset table

set style fill transparent solid 0.1 

plot $Data u 1:2 w lp pt 7 lc rgb "black" ti "Original data", \
     $Data u 1:2 smooth acspline lw 2 lc rgb "red" ti "acspline", \
     $ACSpline u 1:2 w filledcurves x1 lc rgb "red" ti "acspline filled"
### end of code

结果:

加法:

还有另一种方法可以将数据放入 table。检查 help set print。 这样,您就可以将两条样条曲线的数据合并到一个数据块中,并可以绘制它们之间的区域。也许有人知道实现此目的的更简单方法。

代码:

### filled curve between two acsplines
reset session

$Data <<EOD
1 2 4
2 4 1
3 3 0
4 1 3
EOD

# plot your acspline data into tables
set table $ACSpline1
    plot $Data u 1:2:(1) smooth acspline
unset table
set table $ACSpline2
    plot $Data u 1:3:(1) smooth acspline
unset table
set print $BetweenSplines
    do for [i=1:|$ACSpline1|] {
        print sprintf("%s %s %s",word($ACSpline1[i],1),word($ACSpline1[i],2),word($ACSpline2[i],2))
    }
set print

set style fill transparent solid 0.5 

plot $Data u 1:2 w lp pt 7 lc rgb "black" ti "Original data col 2", \
     $Data u 1:3 w lp pt 7 lc rgb "blue" ti "Original data col 3", \
     $ACSpline1 u 1:2 w l lw 2 lc rgb "red" ti "acspline col 2", \
     $ACSpline2 u 1:2 w l lw 2 lc rgb "green" ti "acspline col 3", \
     $BetweenSplines u 1:2:3 w filledcurves lc rgb "yellow" ti "acspline filled"
### end of code

结果: