2013-04-03 22 views
0

文件(我不會感到驚訝,如果這是一個重複的,我無法找到合適的搜索詞,雖然找到它)gnuplot的 - 繪製使用另一個字段作爲標籤

我有一個數據文件形式(簡化了一下):

date  time  label  value 
2013-03-17 10:09:28 thing 1 54 
2013-03-17 10:09:32 thing 2 20 
2013-03-17 10:10:02 thing 3 35 
2013-03-17 10:10:03 thing 1 59 
2013-03-17 10:10:21 thing 1 64 
2013-03-17 10:10:37 thing 3 37 
2013-03-17 10:10:37 thing 2 40 
2013-03-17 10:10:42 thing 3 41 
2013-03-17 10:10:44 thing 2 59 

...什麼我想要做的就是創建一個多線劇情,每「的事情1」,「2東西」和「東西3」並讓Gnuplot相應地自動標記它們。

如果我分裂文件放入單獨的數據集,每一個標籤的話,我知道我可以做一個多線劇情是這樣的:

set timefmt '%Y-%m-%d %H:%M:%S'; 
set xdata time;  
plot 'thing1.txt' using 1:3 title 'thing 1', \ 
    'thing2.txt' using 1:3 title 'thing 2' 

......然而,這似乎是矯枉過正。這可以用Gnuplot實現,而不必將文件分割成單獨的文件 - 每個數據集?實際上,大約有200個單獨的標籤,所以如果Gnuplot可以自動化標籤,它將節省大量數據的手動預處理。

+0

你真的想在你的圖中有200個標籤? – Bernhard

+0

最初是的。最終我會過濾它,所以我只管理少數(可能少於10個),但我不知道這些是什麼,沒有做一些處理。我希望讓數據變得清晰可以節省我編寫腳本來完成初始數字處理。最終,我正在尋找一種趨勢,並且想知道這種趨勢對一切事物是否共同,或者只是一些特定的項目,所以我知道下一步如何處理這些數據。輸入文件是400,000行,所以它不是我可以通過眼睛檢查。 –

+0

您是否考慮編寫一種生成gnuplot腳本並執行它的包裝腳本? – Bernhard

回答

0

呀,你可以做這樣的事情:

plot for [i=1:300] 'thing.txt' using 1:(($4 == i)? $3:NaN) title 'thing '.i 

這不會是最有效的(我敢肯定gnuplot'll閱讀您的文件300倍),但它會得到任務完成。

0

儘管@ mgilson的答案會起作用,但如果數據很大,它可能會非常緩慢,因爲它讀取文件300次。

我認爲手工貼標籤更有效率。如果標籤是數字,我們可以使用它們來選擇一種顏色。例如,下面的線將繪製5列以上的列1,其中顏色從塔4中選擇,並且所述標籤通過繪製具有恆定值的NaN(1/0)

plot 'thing.txt' u 1:5:4 pt 7 lc variable notitle,\ 
    for [i=1:300] 1/0 w p pt 7 lc i title 'thing '.i 

通知的假想線放置默認情況下,gnuplot顏色是循環的,即每N行顏色將被重複(通常,N = 9)。如果您需要不同的顏色,您需要手動設置每個300個案例。要自動執行此操作,this question in SO提供了一些很好的方法。