2016-05-06 83 views
1

我正在處理一個腳本,該腳本針對給定的x值生成任意數量的y值的csv。 csv的第一行具有數據集的名稱。 x值是一個unix時間戳。我想使用gnuplot將這些數據繪製爲一個堆積線圖,其中的值顯示爲該行總數的分數。我將如何做到這一點?GNUPlot - 堆棧行中的任意列數

我看了下面的解決方案,並試圖將它們集成,但我無法弄清楚我做錯了什麼。

它會說沒有足夠的列或一些不匹配的列數。

給定時間索引最多有N列數據。我看到的總數是給定時間指數。

-

我的數據的一個例子:

KEY,CSS,JavaScript,Perl,Python,Shell 
1428852630,0,0,0,0,406 
1428852721,0,0,0,0,406 
1428852793,0,0,0,0,406 
1428853776,0,0,0,0,781 
1429889154,0,0,0,0,1200 
1429891056,0,0,0,0,1648 
1429891182,0,0,0,0,1648 
1429891642,0,0,0,0,1648 
1430176065,0,0,0,0,2056 

但是,可能有大量的列,我想要一個設置在運行時的列數。


http://gnuplot.sourceforge.net/demo/histograms.html - 這似乎有問題,與正在修改成列的任意數量。

plot 'immigration.dat' using (100.*$2/$24):xtic(1) t column(2), \ 
    for [i=3:23] '' using (100.*column(i)/column(24)) title column(i) 

https://newspaint.wordpress.com/2013/09/11/creating-a-filled-stack-graph-in-gnuplot/

+0

有一個矛盾:「值顯示爲總的分數」,「我不知道yrange」?代碼看起來很好,解釋你的問題。每行有24列,例如? – Joce

+0

@Joce我剛剛添加了關於列的信息,並刪除了未知的yrange。 – HSchmale

+0

如何在空列中添加零?您還可以定義將在文件中使用的「丟失數據」符號,例如'set datafile missing'?「'。您應該包含一個小數據樣本的最小示例以獲得準確答案。 – Joce

回答

1

This answer展示瞭如何計算列,有輕微的修改:

file="file.dat" 
get_number_of_cols = "awk -F, 'NR == 1 { print NF; exit }' ".file 
nc=system(get_number_of_cols) 

然後,你需要使之colums 2至nc,讓我們用遞歸做到這一點:

sum(c,C)=((c!=C)?column(c)+sum(c+1,C):column(c)) 

現在你可以繪製:

set key outside 
set datafile separator "," 
plot for [i=nc:2:-1] file using 0:(100*sum(2,i)/sum(2,nc)):xtic(1) title columnhead(i) with filledcurve y=0 

enter image description here