gnuplot stats
命令可用于报告输入数据集的统计信息。它创建一组变量,其中包含有关数据集中特定列的信息。 Here是这种用法的一个例子:
set print "StatDat.dat"
do for [i=2:9] { # Here you will use i for the column.
stats 'data.dat' u i nooutput ;
print i, STATS_median, STATS_mean , STATS_stddev # ...
}
set print
plot "StatDat.dat" us 1:2 # or whatever column you want...
包含报告的列标题会很有用,例如:
print STATS_columnheader, STATS_median, STATS_mean , STATS_stddev # ...
但是gnuplot没有提供必需的STATS_columnheader
变量。
是否有另一种方法可以实现这一目标?
答案 0 :(得分:0)
您可以使用外部工具,例如awk
来提取并返回列标题。您可以创建如下函数:
columnheading(f,c) = system("awk '/^#/ {next}; {print $".c.";exit}' ".f)
,在给定文件f
和列号c
的情况下,
将返回列标题。您将像这样使用它:
print columnheading('StatDat.dat',i).' ', STATS_median, STATS_mean , STATS_stddev # ...
awk表达式会跳过所有行,直到第一条非注释行,然后输出c
参数给定的单词并退出。 gnuplots system
命令返回打印的单词。
答案 1 :(得分:0)
一个快速且肮脏的解决方案已表达为对答案this的评论:
可以将所有标头行一次存储一次 ,然后在需要时调用它。
在* nix下,如果在第10 行中,则可以使用head
或head -n 10| tail -n 1
之类的组合...
在此示例中进行了修改:
firstrow = system('head -1 '.datafile) # you call here only one time
set print "StatDat.dat"
do for [i=2:9] { # Here you will use i for the column.
stats datafile u i nooutput ;
print word(firstrow, i), " ", STATS_median, STATS_mean , STATS_stddev
# or whatever you want...
}
set print
plot "StatDat.dat" us 1:2 # or whatever column you want...
请注意, gnuplot 函数word
将返回字符串中的第n 个单词,因此如果标头是由多个词组成的...
...您可以使用here
以下操作无效,因为gnuplot
在跳过标题和注释行之后开始在plot命令中处理文件...
由于函数可以采用f(x) = (statement1, statement2, statement3, return value)
形式执行语句并返回值(other tricks),因此可以映像以构建存储第一行“字段由字段”的函数(以gnuplot 5.1的形式see, e.g.,通过其他技巧directly),也许用set terminal unknown
隐藏该图。
array MyHeader[4]
f(x,y,z) = (x == 0 ? (MyHeader[y]=z, z ) : z)
set terminal unknown # set terminal dumb
set key autotitle columnhead
do for [i=2:4] { # Here you will use i for the column.
plot datafile using 1:(f($0,i,column(i)))
}
print MyHeader
不幸的是,以上脚本仅存储第一行值...
但就目前而言,我已经可以解决这个问题了:-(
(也许有人可以找到有用的提示或完成提示)。