Gnuplot:怪异的每一个行为

时间:2018-11-23 15:21:13

标签: header gnuplot head

我想绘制一个如下文件:

this is some header
that is written by the measurement software
for example it contains the date: 2018/1/1

column 1    column 2    column 3    column 4
1   12  13  13  14
2   15  15  15  15
3   10  12  13  15
4   9   9   8   8
5   7   9   10  11
6   6   6   6   6

因此有一个多行标头,用空行分隔到数据。只需使用我认为的every命令,就足够容易了。但是有一些问题(MWE):

reset

$testdata << EOD
this is some header
that is written by the measurement software
for example it contains the date: 2018/1/1

column 1    column 2    column 3    column 4
1   12  13  13  14
2   15  15  15  15
3   10  12  13  15
4   9   9   8   8
5   7   9   10  11
6   6   6   6   6
EOD

# set datafile separator "\t"
# set key autotitle columnhead
# set datafile commentschars "abcdefghijklmnopqrstuvwxyz"

# errors: bad data on line X:
# plot $testdata
# plot $testdata every ::1
# plot $testdata every ::2
# plot $testdata every ::3
plot $testdata every ::4

如果仅绘制不含every的文件,则会出现bad data错误(如预期)。我的理解是,我需要忽略前4行,因为它们只是文本,因此必须使用plot $testdata every ::4,但这也忽略了前3个数据点,并且绘图从x = 4开始。 可能使用every ::3,然后绘图从x = 3开始。 使用every ::1every ::2会再次产生bad data错误。

如果我取消注释set key autotitle columnhead的标题只是更改为“是”或“这是某些标题”(取决于datafile separator),因此根本不会忽略标题。同样,尽管现在every ::2有效(..并且绘图从x = 2开始),every ::1仍然会产生错误。

我的目标是得到一个包含每个数据点的图,显然+使用列标题作为标题。我当前的解决方法是set datafile commentschars "abcdefghijklmnopqrstuvwxyz",但这使我无法使用列标题。有一种仅gnuplot的方式来处理此问题吗?我不能更改文件格式,因为它是测量设备的输出。另外,我知道诸如awk之类的工具,但我不是管理员,因此无法安装软件。还应避免这种情况,以允许在不同的计算机上运行脚本。

任何帮助将不胜感激! 非常感谢

1 个答案:

答案 0 :(得分:1)

仅在解析完所有数据之后,才使用every进行数据过滤。这就是为什么您会收到警告和错误的原因,因为第一行无法正确解析。

要在实际解析开始之前跳过某些行,请使用skip关键字:

$testdata <<EOD
this is some header
that is written by the measurement software
for example it contains the date: 2018/1/1

"column 1"    "column 2"    "column 3"    "column 4"
1   12  13  13  14
2   15  15  15  15
3   10  12  13  15
4   9   9   8   8
5   7   9   10  11
6   6   6   6   6
EOD

set key autotitle columnheader
plot $testdata skip 4 using 1:2 w lp

enter image description here