考慮數據集的形式如下:繪製X與總和(y)的
1 3
1 10
2 7
2 14
3 9
我想要一個gnuplot的腳本,該腳本積只有3分(1,3 + 10),(2,7 + 14) ,(3,9)?問題與Gnuplot Cumulative Column Question類似,但這並不能真正解決我的特殊問題。
考慮數據集的形式如下:繪製X與總和(y)的
1 3
1 10
2 7
2 14
3 9
我想要一個gnuplot的腳本,該腳本積只有3分(1,3 + 10),(2,7 + 14) ,(3,9)?問題與Gnuplot Cumulative Column Question類似,但這並不能真正解決我的特殊問題。
實際上,您提到的鏈接爲您提供了一個很好的提示:您可以使用AWK預處理您的數據,然後將其輸入到gnuplot中。
下面一行應該給你你需要的東西(假設你的數據在文件in.txt
):
plot "<awk '{ if ($1 == last_x) sum_y += $2 ; else { print last_x, sum_y; sum_y = $2 } last_x=$1} END { print last_x, sum_y }' in.txt" with lines
當然,內聯呈現AWK腳本不可讀的,所以我在這裏重複它的清晰度:
{
if ($1 == last_x)
sum_y += $2
else {
print last_x, sum_y
sum_y = $2
}
last_x=$1
}
END {
print last_x, sum_y
}
附錄
如果萬一你的輸入文件沒有按照分類第E X座標可以提升管包括呼叫sort
:
plot "< sort -n -k 1 in.txt | awk '{ if ($1 == last_x) sum_y += $2 ; else { print last_x, sum_y; sum_y = $2 } last_x=$1} END { print last_x, sum_y }'" with lines
謝謝你這個作品!但是,它只有在所有相同的x值連續時纔有效。我認爲在一般情況下,也必須有一種複雜的方式來實現它。 – Tushar 2014-10-17 23:15:32
的Gnuplot有一些平滑的選擇。其中之一是smooth frequency
正是你想要什麼呢:
plot 'data.txt' smooth frequency w l
它首先呈現在X單調的數據,然後總結了所有的y值相同的x值。
+1:生活可以如此簡單。 :-) – 2014-10-18 08:24:50
空行是故意的嗎?如果不是,您應該從樣本數據中刪除它們。 – 2014-10-17 22:57:41
@Marcus:我刪除了空行。 – Tushar 2014-10-17 23:01:09
確認後,我重新格式化了您的問題,以使用突出顯示輸入數據的不同方式。 – 2014-10-17 23:03:13