2016-03-02 57 views
1

在GNUPLOT中,我想在單個條形圖上繪製5個值,並用一些間隔分隔。如果我有數據格式化成這樣:明確gnuplot中的繪圖的x值

3342336,3375103,7110653,32770,0

其中的5個值是y值,我怎麼能指定的x值自己的地方他們應該屬於?

例如,我想我的條形圖具有每個條目是長度爲1的, 所以在x值1,在x值3 y值3375103, y軸繪製y值3342336值x 7110653在x值5, y值32770在x值7, 和y值0在x值9.

我將不勝感激任何示例代碼,可以實現這一點。謝謝。

+0

數據應該是多行,還是真的格式化爲一個逗號分隔的行? – Matthew

回答

1

如果您的數據是如圖所示的一行,您可以使用圖的語法循環遍歷列索引並計算該索引的x值來實現此目的。我們可以通過使用檢索指定列號的函數來獲取列。

set boxwidth 1 
set datafile separator comma # only if data is comma separated 
plot for [i=1:5] (2*i-1):(column(i)) with boxes 

如果我們需要確保每次都使用相同的線型,我們可以在繪圖命令中明確指出它。

plot for [i=1:5] (2*i-1):(column(i)) with boxes lt 1 

enter image description here

此外,如果關鍵是要產生的,我們不希望每個小區語句來生成一個,我們可以測試並只給第一個迭代非空的標題(一個空的標題被視爲與無標題相同)。

plot for [i=1:5] (2*i-1):(column(i)) with boxes lt 1 title (i==1)?"Title":"" 

如果數據被分離爲行作爲是正常格式,這可以得到不同的方式。

gnuplot有幾個poududucolumns(詳見help pseudocolumns)。在你的情況下,第0列是有趣的。列0給出從0開始的數據的行號。因此,要獲得像這樣的順序奇數,可以使用2*$0+1

例如,如果你的數據(存儲在datafile.txt)看起來像

3342336 
3375103 
7110653 
32770 
0 

,您要在這些值繪製長度爲1盒,你可以做

set boxwidth 1 
plot "datafile.txt" u (2*$0+1):1 with boxes 
+0

如果我的數據列如下: > 3342336 3375103 7110653 32770 0 如此我不能在我的原始數據文件中重新組織它以適合一列。是否有一種簡單的方法告訴gnuplot使用(2 * $ 0 + 1):1公式讀取每一列? –

+0

@霍華德看到我編輯答案的第一部分。 – Matthew

+0

謝謝馬修! –