2016-02-20 44 views
0

我有一個應該使用gnuplot繪製的.csv數據文件。 讓我們假設該文件的格式如下:Gnuplot:爲什麼在我的數據文件中自動忽略第一行

A;B;C;D;E;F 
1;1;2;1;1;1 
2;3;3;3;5;6 
3;4;1;1;1;4 

第一列(列A)爲X軸,列B至F每個人都應該被繪製成自己lineplot(是的,我知道,太多的行一塊地塊內的情節可能看起來很糟糕,但只是爲了得到一個想法)。這裏一個MCVE:

set terminal png size 1000,500  
set datafile separator ";" # CSV file is seperated with ; 
plot \ 
    'C://tmp/test.csv' using 1:2 with lines title "B",\ 
    'C://tmp/test.csv' using 1:3 with lines title "C",\ 
    'C://tmp/test.csv' using 1:4 with lines title "D",\ 
    'C://tmp/test.csv' using 1:5 with lines title "E",\ 
    'C://tmp/test.csv' using 1:6 with lines title "F" 

我讀到忽略數據文件中的第一行,我將不得不評論它,啓動符合#,像#A;B;C;D;E;F;或者使用plot <filename> every ::1來忽略第一行,這意味着我必須在上面的腳本中包含every ::1 5次,如解釋in this link所述。

儘管如此,上面的腳本運行良好並創建了一個有效的.png,自動忽略了.csv中的第一行。

我知道「爲什麼打擾,如果它無論如何工作」?但我總是想知道發生了什麼,所以:爲什麼會發生這種情況?在gnuplot中有什麼改變,以便自動檢測標題行,並且不再需要在.csv中註釋標題行?

回答

2

這並不是說gnuplot認爲第一行是標題或標籤,只是它沒有從第一行開始繪製的有效點。你在哪裏繪製點(A,B)?它沒有價值。 (2,3)是可以繪製的點,但不是(A,B)。由於這不是一個有效的點,它只是忽略它。

嘗試刪除輸入文件的所有其它行,以便它只能讀取

A;B;C;D;E;F 

這將給予警告,它是「跳過沒有有效點的數據文件」。

註釋(以#開頭的行)對顯式忽略行而非希望它不被解釋爲可繪製值非常有用。如果列標題行中包含數字,該怎麼辦?它可能試圖繪製它,這不是你想要的。

忽略不可顯示的數據點可能很有用。您可以通過讓他們評估爲NaN(而不是數字)來篩選出您不想繪製的值。由於它不能繪製NaN,它會忽略它。例如:

plot 'C://tmp/test.csv' using ($1<10 ? NaN : $1):2 with lines title "B" 

只會情節只有在X值至少爲10,忽略所有其他人,因爲他們評估爲NaN,這是unplottable這些點。

+0

感謝您的解釋。我不知道自動忽略不可繪製的值,我認爲如果讀取了一些無效的數據,就會打印一個錯誤。我只是在.csv中做了一些不可測的值的測試(例如,用一個字母替換某個數字),所有內容都與您的解釋一致。 –

+1

有條件地忽略它們(例如'NaN')是非常有用的,也是一種常用技術。它對無效值不會產生任何錯誤,如果忽略文件中的行(或不存在),則只會發出警告。所以,如果你確實忽略了這樣的目的,請注意gnuplot的stderr輸出。 – e0k

相關問題