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 ::1
或 every ::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
我想绘制如下文件:
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 ::1
或 every ::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