2012-10-10 72 views

回答

30

這絕對有可能,你的數據文件已經是正確的格式。

plot 'test.dat' i 0 u 1:2 w lines title columnheader(1),\ 
     'test.dat' i 1 u 1:2 w lines title columnheader(1) 

可以使用濃縮迭代:

plot for [IDX=0:1] 'test.dat' i IDX u 1:2 w lines title columnheader(1) 
你要找的是建立在其n列的頂部讀取數據,並使用它作爲情節標題的功能集成到 columnheader(N)
+0

我曾嘗試使用'columnheader(1)'作爲* my *數據文件格式(標題爲註釋),但它不起作用。不過,對於原始海報的格式,我很高興有這樣一個簡單的解決方案! – andyras

+0

@andyras - 這是因爲你註釋掉了標題「數據」,所以gnuplot忽略了它。據我所知,數據文件中的'#'行被所有東西忽略,而不解析的行(例如非數字)被愉快地忽略,但它們仍然可用於特殊功能,如'columnhead'。 – mgilson

+0

出於某種原因,使用第一種方法建議導致「相當大」的文件出現問題。我試圖繪製一個2 GB的文件,我有32 GB的內存,並且內存不足,因爲我的'test.dat'包含50個數據序列,因此我有一個'plot'命令,其後有50個繪圖指令。看來GNUPLOT正在將2GB文件加載到內存中50次,導致內存不足。 !? – user3728501

1

與您的數據集的輕微的修改(這樣的標題被定爲註釋):

#"p = 0.1" 
1 1 
3 3 
4 1 


#"p = 0.2" 
1 3 
2 2 
5 2 

您可以繪製這兩個數據集作爲單獨的線路是這樣的:

plot 'data.dat' i 0 t "p = 0.1", '' i 1 t "p = 0.2" 

plot命令的index(簡稱i)選項告訴gnuplot繪製第i個數據集。我無法找到一種方法讓gnuplot從標題中自動獲取標題,這就是爲什麼我使用title(簡稱爲t)選項手動指定它們的原因。

+0

謝謝!然而,讓Gnuplot使用文件中給出的標題本來就是一個重點。但是,如果這是不可能的,那麼我將不得不按照你提出的方式來完成:-( – gTcV

+2

@andyras - 你一定可以自動獲得標題:-)。技巧是'columnheader'(請參閱我的答案)。 – mgilson

4

基於由andyras(answer 1answer 2)給出的答案使自動化的所有過程中的溶液是使用:

datafile = 'test.dat' 
stats datafile 
plot for [IDX=1:STATS_blocks] datafile index (IDX-1) u 1:2 w lines t\ 
columnheader(1) lc variable 

這樣,腳本會自動檢測數據塊的數量,並用不同的顏色繪製圖形,並在每個數據塊的第一行中定義相應的標題。

+0

您測試了哪個版本?在5.0上。3我需要一些修補程序才能正常工作:http://stackoverflow.com/a/39211206/895245 –

2

gnuplot的5.1(2016年8月28日)

這類似於https://stackoverflow.com/a/29495496/895245但也有一些修正更高版本。

腳本:

datafile = 'test.dat' 
stats datafile nooutput 
plot for [IDX=0:STATS_blocks-1] \ 
    datafile \ 
    index IDX \ 
    using 1:2 \ 
    with lines \ 
    title columnheader(1) 

測試數據:

a 
1, 1 
2, 2 
3, 3 


"b" 
1, 1 
2, 4 
3, 9 


"c, c" 
1, 1 
2, 8 
3, 27 

輸出:

這適用於2016年8月28日這以後將成爲5.1,但不在5.0.3(Ubuntu 16.04)中,因爲在5.0.3中,stats命令給出由於列標題不是有效數據,因此出現錯誤。而在2016/08/28這只是一個警告。

我問如何刪除在警告:https://groups.google.com/forum/#!topic/comp.graphics.apps.gnuplot/Pi4aBE2PwZ8

使用註釋,如:

#a 
1, 1 
2, 2 
3, 3 

沒有在任一版本的工作,我已經測試過,它只是忽略。

3

這是Bruce_Warrior'sCiro Santilli's答案,但沒有中間stats

# plot.gpi 
datafile = ARG1 
plot for [i=0:*] datafile index i using 1:2\ 
with lines title columnheader(1) 

for迴路可以在文件中直接遍歷所有數據集。它在gnuplot 5.0.5中工作,但我不確定for何時獲得了此功能。它記錄在the 5.0 manual但不是the 4.6 manual

除非線條顏色應該由linecolor variable(根據布魯斯的回答)消耗的第三個輸入列確定,否則gnuplot會自動分配不同的顏色和線條樣式。在這種特殊情況下,using 1:2也可以省略。

$ gnuplot --version 
gnuplot 5.0 patchlevel 5 
$ gnuplot --persist -c plot.gpi test.dat 

Plot de

test.dat

"p = 0.1" 
1 1 
3 3 
4 1 


"p = 0.2" 
1 3 
2 2 
5 2 
+0

瞭解'for'中的'*'可以輕鬆實現各種有用的功能。但是,在其他情況下,我們可能需要其他地方的塊數,因此仍然需要使用「統計」。例如,現在我需要'STATS_blocks'來計算通過調色板的步驟以生成平滑的顏色範圍。 –

相關問題