我想绘制一个如下文件:
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 ::1
或every ::2
会再次产生bad data
错误。
如果我取消注释set key autotitle columnhead
的标题只是更改为“是”或“这是某些标题”(取决于datafile separator
),因此根本不会忽略标题。同样,尽管现在every ::2
有效(..并且绘图从x = 2开始),every ::1
仍然会产生错误。
我的目标是得到一个包含每个数据点的图,显然+使用列标题作为标题。我当前的解决方法是set datafile commentschars "abcdefghijklmnopqrstuvwxyz"
,但这使我无法使用列标题。有一种仅gnuplot的方式来处理此问题吗?我不能更改文件格式,因为它是测量设备的输出。另外,我知道诸如awk之类的工具,但我不是管理员,因此无法安装软件。还应避免这种情况,以允许在不同的计算机上运行脚本。
任何帮助将不胜感激! 非常感谢
答案 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