假設我有一個看起來像這樣的文件:如何在Gnuplot中繪製一個文件中標題的幾個數據集?
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
是否有可能使gnuplot的情節一個情節在每個數據集的第一行給出的標題這兩個數據集?
假設我有一個看起來像這樣的文件:如何在Gnuplot中繪製一個文件中標題的幾個數據集?
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
是否有可能使gnuplot的情節一個情節在每個數據集的第一行給出的標題這兩個數據集?
這絕對有可能,你的數據文件已經是正確的格式。
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)
與您的數據集的輕微的修改(這樣的標題被定爲註釋):
#"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
)選項手動指定它們的原因。
基於由andyras(answer 1和answer 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
這樣,腳本會自動檢測數據塊的數量,並用不同的顏色繪製圖形,並在每個數據塊的第一行中定義相應的標題。
您測試了哪個版本?在5.0上。3我需要一些修補程序才能正常工作:http://stackoverflow.com/a/39211206/895245 –
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
沒有在任一版本的工作,我已經測試過,它只是忽略。
這是Bruce_Warrior's和Ciro 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
test.dat
是
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
瞭解'for'中的'*'可以輕鬆實現各種有用的功能。但是,在其他情況下,我們可能需要其他地方的塊數,因此仍然需要使用「統計」。例如,現在我需要'STATS_blocks'來計算通過調色板的步驟以生成平滑的顏色範圍。 –
我曾嘗試使用'columnheader(1)'作爲* my *數據文件格式(標題爲註釋),但它不起作用。不過,對於原始海報的格式,我很高興有這樣一個簡單的解決方案! – andyras
@andyras - 這是因爲你註釋掉了標題「數據」,所以gnuplot忽略了它。據我所知,數據文件中的'#'行被所有東西忽略,而不解析的行(例如非數字)被愉快地忽略,但它們仍然可用於特殊功能,如'columnhead'。 – mgilson
出於某種原因,使用第一種方法建議導致「相當大」的文件出現問題。我試圖繪製一個2 GB的文件,我有32 GB的內存,並且內存不足,因爲我的'test.dat'包含50個數據序列,因此我有一個'plot'命令,其後有50個繪圖指令。看來GNUPLOT正在將2GB文件加載到內存中50次,導致內存不足。 !? – user3728501