我想绘制一个已经创建的直方图数据,存储在 hist.dat 中:
#hist1
100
1
9
10
30
30
10
9
1
其中(第零行是注释),第一行包含直方图 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 不能在 using 中调用(它是一个字符串,这就是我尝试添加 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