了解关键字 every 的用法

Understanding the use of the keyword every

我的问题是关于用于对输入数据文件进行采样的关键字 every(即 .csv.dat 等)。我正在阅读说明如下的关键字的文档:

     plot 'file' every {<point_incr>}
                         {:{<block_incr>}
                           {:{<start_point>}
                             {:{<start_block>}
                               {:{<end_point>}
                                 {:<end_block>}}}}}

问题是我无法完全理解如何使其适应数据集。例如,如果我有一些虚拟数据想用来创建条形图,并且数据如下


# first bars group
#x axis   #y axis
0          2
0.2        3                  
0.4        4                  
0.6        5                 
0.8        6                 
                             
#second bars group           
1          1 
1.2        2
1.4        3
1.6        4
1.8        5

#etc.
3     10
3.2   20
3.4   30
3.6   40
3.8   50 

4     20
4.2   30
4.4   40
4.6   50
4.8   60 

假设我想从数据中创建四个条形簇。每个街区一个。如何使用关键字的语法?有人可以给我一些例子来更好地理解它的用法吗?提前谢谢你

来自help every

The data points to be plotted are selected according to a loop from <start_point> to <end_point> with increment <point_incr> and the blocks according to a loop from <start_block> to <end_block> with increment <block_incr>.

这应该很清楚了,但是,您必须知道块是否由两个(或更多)空行分隔,您必须以不同方式处理它们。检查 help index。在我看来,文档对数据块、(子)块、数据集等有点混乱...

检查以下示例。我认为这不是您的最终图表,但仍需要一些调整。根据您的详细要求,您可能还需要检查 help histograms.

例如 every :::i::i 将绘制块 i 中的所有数据点,即从块 i 到块 i.

代码:

### plotting using "every"
reset session

$Data <<EOD
# first bars group
#x axis   #y axis
0          2
0.2        3
0.4        4
0.6        5
0.8        6
            
#second bars group
1          1 
1.2        2
1.4        3
1.6        4
1.8        5

#etc.
3     10
3.2   20
3.4   30
3.6   40
3.8   50 

4     20
4.2   30
4.4   40
4.6   50
4.8   60 
EOD

set key top left
set boxwidth 0.2
set key out noautotitles
set style fill solid 0.3
set yrange [:70]

plot for [i=0:3] $Data u 1:2 every :::i::i w boxes
### end of code

结果:

如您所见,every 关键字允许您挑选单换行分隔 和双换行分隔 blocks 来自你的数据文件。您的示例数据文件显示分为 4 个块的 20 个点。

因此要绘制第一个块(在 gnuplot 中索引为 0),您只需指定结束块,并使用其他 every 参数的默认值。尝试:

plot 'data.txt' every :::::0 with boxes

您的目标似乎是用单独的样式绘制每个块。下面介绍了如何使用一些额外的样式命令来做到这一点。 (请注意我对某些关键字使用了 gnuplot 的 shorthand。)

set key left top
set boxwidth 0.2
p 'data.txt' ev :::0::0 w boxes t 'first',\
  'data.txt' ev :::1::1 w boxes t 'second',\
  'data.txt' ev :::2::2 w boxes t 'third',\
  'data.txt' ev :::3::3 w boxes t 'fourth'