Gnuplot:在包括间隔边在内的范围内,每N个点绘制一次

Gnuplot:在包括间隔边在内的范围内,每N个点绘制一次,gnuplot,Gnuplot,我有一些大约10k记录的数据文件;每个记录包含一个值加上它的标准偏差 我将标准偏差绘制为略微透明的填充曲线。然而,由于在绘制如此多的点时出现了一些奇怪的工件,所以我使用each命令来绘制每99个点 '$1' using 1:(\$3-\$5):(\$3+\$5) every 99::0 with filledcurves ls $COUNTER notitle 这是完美的;但是,我的问题是,根据文件中的确切记录数量,every命令可能会跳过最后的条目,结果是彩色标准偏差区域在其相应的行之前结束

我有一些大约10k记录的数据文件;每个记录包含一个值加上它的标准偏差

我将标准偏差绘制为略微透明的
填充曲线
。然而,由于在绘制如此多的点时出现了一些奇怪的工件,所以我使用
each
命令来绘制每99个点

'$1' using 1:(\$3-\$5):(\$3+\$5) every 99::0 with filledcurves ls $COUNTER notitle
这是完美的;但是,我的问题是,根据文件中的确切记录数量,
every
命令可能会跳过最后的条目,结果是彩色标准偏差区域在其相应的行之前结束

是否有办法将最后一条记录包含到每个命令/填充的绘图中,以便彩色区域延伸到需要的位置

编辑:我试图避免的效果是:


在处理新数据时,我似乎无法真正复制它,但我确信每隔一段时间选取一次点可以避免它。

[修改以显示对NaN值的完整处理。使用真实数据文件演示]

您可以使用说明符为
构造一个过滤函数,而不是
每个

set xrange [100:600]
xmax = 600
filter(x) = (int(column(0))%9 == 0  ||  x == xmax) ? 1 : 0
set datafile missing NaN
plot 'silver.dat' using (filter($1)?$1:NaN) : ($2-$3) : ($2+$3) with filledcurves, \
     '' using 1:2 with lines

[修改以显示NaN值的完整处理。使用真实数据文件演示]

您可以使用
说明符为
构造一个过滤函数,而不是
每个

set xrange [100:600]
xmax = 600
filter(x) = (int(column(0))%9 == 0  ||  x == xmax) ? 1 : 0
set datafile missing NaN
plot 'silver.dat' using (filter($1)?$1:NaN) : ($2-$3) : ($2+$3) with filledcurves, \
     '' using 1:2 with lines

您在使用透明打印约10k个数据点时提到了彩虹图案?虽然不同的终端看起来不同,但我无法在Win7下的gnuplot 5.2.6中观察到这种行为,或者我们正在讨论不同的事情。也许,您的数据或终端或操作系统是特殊的

测试代码:

### transparent error range
reset session
# set term wxt size 600,600
# set term qt size 600,600
set term pngcairo size 600,600
set output "ErrorRangePNGCairo.png"
set key left

GenerateData = 'set print $Data; \
    do for [i=1:Max] { print sprintf("%g\t%g\t%.3f",i,i+rand(0)*Max*0.1,rand(0)*Max*0.1+Max*0.05) }; \
    set print'

PlotData = 'plot \
        $Data u 1:($2+$3):($2-$3) w filledcurves lc rgb "#aaff0000" t "Error",\
        "" u 1:2 w l lc rgb "red" t "Data"'

set multiplot layout 3,1
    Max = 100
    @GenerateData
    @PlotData

    Max = 1000
    @GenerateData
    @PlotData

    Max = 10000
    @GenerateData
    @PlotData
unset multiplot
set output
### end of code
wxt终端:

### transparent error range
reset session
# set term wxt size 600,600
# set term qt size 600,600
set term pngcairo size 600,600
set output "ErrorRangePNGCairo.png"
set key left

GenerateData = 'set print $Data; \
    do for [i=1:Max] { print sprintf("%g\t%g\t%.3f",i,i+rand(0)*Max*0.1,rand(0)*Max*0.1+Max*0.05) }; \
    set print'

PlotData = 'plot \
        $Data u 1:($2+$3):($2-$3) w filledcurves lc rgb "#aaff0000" t "Error",\
        "" u 1:2 w l lc rgb "red" t "Data"'

set multiplot layout 3,1
    Max = 100
    @GenerateData
    @PlotData

    Max = 1000
    @GenerateData
    @PlotData

    Max = 10000
    @GenerateData
    @PlotData
unset multiplot
set output
### end of code

qt终端:

### transparent error range
reset session
# set term wxt size 600,600
# set term qt size 600,600
set term pngcairo size 600,600
set output "ErrorRangePNGCairo.png"
set key left

GenerateData = 'set print $Data; \
    do for [i=1:Max] { print sprintf("%g\t%g\t%.3f",i,i+rand(0)*Max*0.1,rand(0)*Max*0.1+Max*0.05) }; \
    set print'

PlotData = 'plot \
        $Data u 1:($2+$3):($2-$3) w filledcurves lc rgb "#aaff0000" t "Error",\
        "" u 1:2 w l lc rgb "red" t "Data"'

set multiplot layout 3,1
    Max = 100
    @GenerateData
    @PlotData

    Max = 1000
    @GenerateData
    @PlotData

    Max = 10000
    @GenerateData
    @PlotData
unset multiplot
set output
### end of code

pngcairo终端:

### transparent error range
reset session
# set term wxt size 600,600
# set term qt size 600,600
set term pngcairo size 600,600
set output "ErrorRangePNGCairo.png"
set key left

GenerateData = 'set print $Data; \
    do for [i=1:Max] { print sprintf("%g\t%g\t%.3f",i,i+rand(0)*Max*0.1,rand(0)*Max*0.1+Max*0.05) }; \
    set print'

PlotData = 'plot \
        $Data u 1:($2+$3):($2-$3) w filledcurves lc rgb "#aaff0000" t "Error",\
        "" u 1:2 w l lc rgb "red" t "Data"'

set multiplot layout 3,1
    Max = 100
    @GenerateData
    @PlotData

    Max = 1000
    @GenerateData
    @PlotData

    Max = 10000
    @GenerateData
    @PlotData
unset multiplot
set output
### end of code

您在使用透明打印约10k个数据点时提到了彩虹图案?虽然不同的终端看起来不同,但我无法在Win7下的gnuplot 5.2.6中观察到这种行为,或者我们正在讨论不同的事情。也许,您的数据或终端或操作系统是特殊的

测试代码:

### transparent error range
reset session
# set term wxt size 600,600
# set term qt size 600,600
set term pngcairo size 600,600
set output "ErrorRangePNGCairo.png"
set key left

GenerateData = 'set print $Data; \
    do for [i=1:Max] { print sprintf("%g\t%g\t%.3f",i,i+rand(0)*Max*0.1,rand(0)*Max*0.1+Max*0.05) }; \
    set print'

PlotData = 'plot \
        $Data u 1:($2+$3):($2-$3) w filledcurves lc rgb "#aaff0000" t "Error",\
        "" u 1:2 w l lc rgb "red" t "Data"'

set multiplot layout 3,1
    Max = 100
    @GenerateData
    @PlotData

    Max = 1000
    @GenerateData
    @PlotData

    Max = 10000
    @GenerateData
    @PlotData
unset multiplot
set output
### end of code
wxt终端:

### transparent error range
reset session
# set term wxt size 600,600
# set term qt size 600,600
set term pngcairo size 600,600
set output "ErrorRangePNGCairo.png"
set key left

GenerateData = 'set print $Data; \
    do for [i=1:Max] { print sprintf("%g\t%g\t%.3f",i,i+rand(0)*Max*0.1,rand(0)*Max*0.1+Max*0.05) }; \
    set print'

PlotData = 'plot \
        $Data u 1:($2+$3):($2-$3) w filledcurves lc rgb "#aaff0000" t "Error",\
        "" u 1:2 w l lc rgb "red" t "Data"'

set multiplot layout 3,1
    Max = 100
    @GenerateData
    @PlotData

    Max = 1000
    @GenerateData
    @PlotData

    Max = 10000
    @GenerateData
    @PlotData
unset multiplot
set output
### end of code

qt终端:

### transparent error range
reset session
# set term wxt size 600,600
# set term qt size 600,600
set term pngcairo size 600,600
set output "ErrorRangePNGCairo.png"
set key left

GenerateData = 'set print $Data; \
    do for [i=1:Max] { print sprintf("%g\t%g\t%.3f",i,i+rand(0)*Max*0.1,rand(0)*Max*0.1+Max*0.05) }; \
    set print'

PlotData = 'plot \
        $Data u 1:($2+$3):($2-$3) w filledcurves lc rgb "#aaff0000" t "Error",\
        "" u 1:2 w l lc rgb "red" t "Data"'

set multiplot layout 3,1
    Max = 100
    @GenerateData
    @PlotData

    Max = 1000
    @GenerateData
    @PlotData

    Max = 10000
    @GenerateData
    @PlotData
unset multiplot
set output
### end of code

pngcairo终端:

### transparent error range
reset session
# set term wxt size 600,600
# set term qt size 600,600
set term pngcairo size 600,600
set output "ErrorRangePNGCairo.png"
set key left

GenerateData = 'set print $Data; \
    do for [i=1:Max] { print sprintf("%g\t%g\t%.3f",i,i+rand(0)*Max*0.1,rand(0)*Max*0.1+Max*0.05) }; \
    set print'

PlotData = 'plot \
        $Data u 1:($2+$3):($2-$3) w filledcurves lc rgb "#aaff0000" t "Error",\
        "" u 1:2 w l lc rgb "red" t "Data"'

set multiplot layout 3,1
    Max = 100
    @GenerateData
    @PlotData

    Max = 1000
    @GenerateData
    @PlotData

    Max = 10000
    @GenerateData
    @PlotData
unset multiplot
set output
### end of code

什么是奇怪的艺术品?也许他们可以被淘汰,而不是遇到新的“惊喜”?我已经有一段时间没有改变了;然而,我记得,在某些情况下,最终的情节看起来几乎是彩虹色的。我认为这是因为gnuplot用一系列填充的三角形填充填充填充曲线,在某些情况下,这会导致三角形之间的边界变得可见(因为我没有使用完全不透明度),这与数千个点结合在一起会使绘图非常闪烁。奇怪的人工制品是什么?也许他们可以被淘汰,而不是遇到新的“惊喜”?我已经有一段时间没有改变了;然而,我记得,在某些情况下,最终的情节看起来几乎是彩虹色的。我假设这是因为gnuplot用一系列填充的三角形填充填充填充曲线,在某些情况下,这会导致三角形之间的边界变得可见(因为我没有使用完全不透明度),这与数千个点结合在一起会使绘图非常模糊。xmax是一个东西还是我必须使用
stats
提取它?我正在尝试,但是,我定义的任何不产生连续点的过滤器似乎都不会打印任何东西xmax是由缩放图形中显示的垂直打印边框表示的任何值。我假设它对应于设置
set xrange[xmin:xmax]
。或者,如果它来自自动缩放数据,那么是的,您可以使用
stats
命令提前找到它。“不打印任何内容”-是的,对不起,我忘记显示辅助命令。请看修改后的答案。谢谢!似乎我需要的是
set数据文件missing NaN
:)xmax是一个东西还是我必须使用
stats
提取它?我正在尝试,但是,我定义的任何不产生连续点的过滤器似乎都不会打印任何东西xmax是由缩放图形中显示的垂直打印边框表示的任何值。我假设它对应于设置
set xrange[xmin:xmax]
。或者,如果它来自自动缩放数据,那么是的,您可以使用
stats
命令提前找到它。“不打印任何内容”-是的,对不起,我忘记显示辅助命令。请看修改后的答案。谢谢!似乎我需要的是
设置数据文件缺少NaN
:)嗯。。看来这可能是他们已经解决的问题。我似乎无法复制它,但我确实有它的效果截图(我已经将它添加到我的问题中)。嗯。。看来这可能是他们已经解决的问题。我似乎无法复制它,但我确实有它的效果截图(我已经将它添加到我的问题中)。