假设我的gnuplot脚本想要在数据中的特定点上放置标签或箭头。数据已在另一个程序中创建,它可以将它们编码到数据文件的标题行中。不幸的是gnuplot无法使用 columnheader(num)将数据拉出。
实施例。我创建直方图数据,包括均值,西格玛和一些极限值。编写数据文件的程序将其放入第一行。看起来像这样:(0.2743是平均值,3.0是异常值限制)
"Data" 0.2743 1.0
0 "-INF -> -5.0" 0 0.00
1 " -5.0 -> -4.5" 0 0.00
2 " -4.5 -> -4.0" 2 0.03
3 " -4.0 -> -3.5" 4 0.06
4 " -3.5 -> -3.0" 3 0.05
5 " -3.0 -> -2.5" 5 0.08
6 " -2.5 -> -2.0" 19 0.30
7 " -2.0 -> -1.5" 49 0.78
8 " -1.5 -> -1.0" 193 3.07
9 " -1.0 -> -0.5" 527 8.39
10 " -0.5 -> +0.0" 1289 20.53
11 " +0.0 -> +0.5" 1878 29.90
12 " +0.5 -> +1.0" 1411 22.47
13 " +1.0 -> +1.5" 636 10.13
14 " +1.5 -> +2.0" 178 2.83
15 " +2.0 -> +2.5" 56 0.89
16 " +2.5 -> +3.0" 17 0.27
17 " +3.0 -> +3.5" 9 0.14
18 " +3.5 -> +4.0" 4 0.06
19 " +4.0 -> +4.5" 0 0.00
20 " +4.5 -> +5.0" 0 0.00
21 " +5.0 -> +INF" 0 0.00
现在我尝试从脚本中引用它来创建绘图中的箭头。
...
mean= columnheader(2)
sdev= columnheader(3)
lboffs= 0.2
set arrow from 11.0 + mean,0.0 to 11.0 + mean ,GPVAL_DATA_Y_MAX*1.2 nohead lw 2 lc rgb "dark-green"
set arrow from 11.0 + mean - 3 * sdev,0.0 to 11.0 + mean - 3 * sdev ,GPVAL_DATA_Y_MAX*1.2 nohead lw 2 lc rgb "red"
set arrow from 11.0 + mean + 3 * sdev,0.0 to 11.0 + mean + 3 * sdev ,GPVAL_DATA_Y_MAX*1.2 nohead lw 2 lc rgb "red"
set arrow from 11.0,0.0 to 11.0,GPVAL_DATA_Y_MAX*1.2 nohead lw 2 lc rgb "blue"
set label "Mean" at 11.0 + mean + lboffs,GPVAL_DATA_Y_MAX*1.1 tc rgb "dark-green"
set label "+3%" at 11.0 + mean + 3 * sdev + lboffs,GPVAL_DATA_Y_MAX*1.1 tc rgb "red"
set label "-3%" at 11.0 + mean - 3 * sdev + lboffs,GPVAL_DATA_Y_MAX*1.1 tc rgb "red"
...
原来这不起作用。
gnuplot> mean= columnheader(2)
undefined function: columnheader
gnuplot> sdev= columnheader(3)
undefined function: columnheader
缺少什么?或者有更好的方法将变量输入gnuplot吗?
谢谢, 格特
答案 0 :(得分:0)
函数columnheader
在plot
上下文之外不起作用。但是,有几个选项可以访问数据文件第一行中的值。
例如,您可以使用外部处理:
fName = 'input.dat'
getColumn(n)=system(sprintf("head -n1 %s | awk '{print $%d}'", fName, n))*1.
mean = getColumn(2)
std = getColumn(3)
或者,您可以将stats
命令与every
结合使用,以便仅选择第一行:
stats fName every ::0::0 using 2:3 nooutput
mean = STATS_min_x
std = STATS_min_y