Gnuplot:奇怪的每一个行为

Gnuplot: weird every behaviour

我想绘制如下文件:

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

所以有一个multi-line header和数据之间用空行隔开。好吧,只要使用我认为的 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,标题只会更改为 "is" 或 "this is some Header"(取决于 datafile separator),因此头部根本不会被忽略。此外,虽然现在 every ::2 有效(..并且绘图从 x=2 开始),但 every ::1 仍然会产生错误。

我的目标是获得一个明显包含每个数据点的图 + 使用列header作为标题。我当前的解决方法是 set datafile commentschars "abcdefghijklmnopqrstuvwxyz",但这使我无法使用 columnhead-titles。有没有 gnuplot-only 的方法来处理这个问题?我无法更改文件格式,因为它是测量设备的输出。另外,我知道像 awk 这样的工具,但我不是管理员,无法安装软件。这也应该避免允许 运行 不同机器上的脚本。

非常感谢任何帮助! 非常感谢

使用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