我想繪製存儲在hist.dat爲已經創建直方圖數據:如何使用gnuplot的繪圖操作數據並將數字存儲在同一個文件中?
#hist1
100
1
9
10
30
30
10
9
1
凡(零行是註釋),第一行包含直方圖的y值的總和,並且x值是1,2,...(行號)。因此,沒有normation,我可以用
plot "hist.dat" every::1 using 0:1
與normation我可以用
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
信不信由你,我從來沒有意識到你可以在gnuplot函數中使用字段'$ 1','$ 0','$ ...'。另外,在三元運算符內部非常巧妙地使用內聯函數 - 我也不會認爲這是可能的。到處都是,這是一個夢幻般的答案。 +1(和聖誕快樂)從我身上。 – mgilson
謝謝,祝你聖誕快樂!我實際上從你的答案中得到了一些啓發,這些答案告訴我你可以在函數定義中逗號分隔命令。 (http://stackoverflow.com/questions/13655048/display-underscore-rather-than-subscript-in-gnuplot-titles/13655849#13655849) – andyras
答案是相當不錯的,但你不使用的信息(參數)傳遞給函數'first'。在問題部分可以看到針對多列文件的改進解決方案。 – DanielTuzes