在数据上结合 acspline 和 filledcurve
Combining acspline with filledcurve on data
我知道如何使用 filledcurve
和 using 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 acspline
和 with 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
结果:
我知道如何使用 filledcurve
和 using 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 acspline
和 with 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
结果: