2014-10-17 49 views
1

考慮數據集的形式如下:繪製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類似,但這並不能真正解決我的特殊問題。

+0

空行是故意的嗎?如果不是,您應該從樣本數據中刪除它們。 – 2014-10-17 22:57:41

+0

@Marcus:我刪除了空行。 – Tushar 2014-10-17 23:01:09

+0

確認後,我重新格式化了您的問題,以使用突出顯示輸入數據的不同方式。 – 2014-10-17 23:03:13

回答

1

實際上,您提到的鏈接爲您提供了一個很好的提示:您可以使用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 
+0

謝謝你這個作品!但是,它只有在所有相同的x值連續時纔有效。我認爲在一般情況下,也必須有一種複雜的方式來實現它。 – Tushar 2014-10-17 23:15:32

1

的Gnuplot有一些平滑的選擇。其中之一是smooth frequency正是你想要什麼呢:

plot 'data.txt' smooth frequency w l 

它首先呈現在X單調的數據,然後總結了所有的y值相同的x值。

+0

+1:生活可以如此簡單。 :-) – 2014-10-18 08:24:50