我的问题涉及用于对输入数据文件进行采样的关键字
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
假设我想从数据创建四个条形簇。每个街区一个。如何使用关键字的语法?有人可以给我一些例子来更好地理解它的用法吗?先谢谢你了
正如您所发现的,
every
关键字允许您从数据文件中挑选单换行符分隔的点和双换行符分隔的块的子集。您的示例数据文件显示 20 个点分为 4 个块。
因此,要绘制第一个块(在 gnuplot 中索引为 0),您只需指定结束块,并使用其他
every
参数的默认值。尝试:
plot 'data.txt' every :::::0 with boxes
您的目标似乎是用单独的样式绘制每个块。以下是如何使用一些额外的样式命令来做到这一点。 (请注意我对某些关键字使用 gnuplot 的简写。)
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'
来自
help every
:
要绘制的数据点是根据循环选择的
到 ,增量为 且 根据从 到 的循环进行块 增加 .
这应该很清楚,但是,您必须知道块是否被两个(或更多)空行分隔,您必须以不同的方式处理它们。检查
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
结果:
注释行(即#....)算作空行还是根本不算? (由于由单个空行或 2 个(或更多)空行分隔的数据块之间存在差异,因此这一点很重要)。