如何使用存储在同一文件中的数字与gnuplot的绘图操作数据?

时间:2012-12-25 20:07:24

标签: plot gnuplot

我想绘制已创建的直方图数据,存储在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    

1 个答案:

答案 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命令查找文件中的最大值。