我想绘制已创建的直方图数据,存储在hist.dat中:
#hist1
100
1
9
10
30
30
10
9
1
其中(第0行是注释),第一行包含直方图的y值的总和,x值是1,2,...(行号)。所以没有规范,我可以使用
plot "hist.dat" every::1 using 0:1
并且使用标准我可以使用
plot "hist.dat" every::1 using 0:($1/100)
问题是如何引用总和值(100)?因为我不想预先读取文件只是为了创建一个正确的gnuplot代码,所以我不想写下隐含的值。我已经尝试了
plot "hist.dat" using 0:($1/(columnhead+0))
但是在使用中无法调用columnhead(它是一个字符串,这就是我尝试添加0以使其成为int的原因。)
我不想修改文件或根据这个创建一个新文件,我想只使用适当的gnuplot命令。我想避免忽略总结值并使用gnuplot重新计算它。
解决方案:根据得到正确答案的andyras,有点改进的方法是
first(x) = ($0 == 0) ? (first = column(x), 1/0) : first
plot "hist.dat" using 0:($1/first(1))
如果您有多个列,就像hist.dat
那样,您可以使用它来绘制直方图#hist1 hist2
10000 8000
1000 50
9000 70
1000 1100
3000 4500
3000 1200
1000 700
9000 380
1000
答案 0 :(得分:2)
如何参考汇总值(100)? (没有预先阅读文件)
是的,使用gnuplot函数:
first(x) = ($0 == 0) ? (first = $1, 1/0) : first
plot "hist.dat" using 0:($1/first($1))
如果它正在读取第一行,则该函数将该行的值分配给变量first
并返回1/0(gnuplot将其视为缺失数据,并且不会扩展x范围以包含该行点)。否则,该函数返回值first
。
这样您甚至不必使用every ::1
。
如果您不介意重读文件,可以使用stats
命令查找文件中的最大值。