我有一个.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每个应该绘制为自己的线图(是的,我知道,一个图中的太多线图可能看起来很糟糕,但只是为了得到一个想法)。这是一个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中注释标题行吗?
答案 0 :(得分:2)
并不是说gnuplot将第一行识别为标题或标签,它只是没有从第一行开始绘制的有效点。你会在哪里绘制点(A,B)?它没有任何价值。 (2,3)是你可以绘制的点,但不是(A,B)。由于它不是一个有效的点,它只是忽略它。
尝试删除输入文件的所有其他行,以便它只读取
A;B;C;D;E;F
它会发出警告,它是&#34;跳过没有有效点的数据文件&#34;。
注释(以#
开头的行)对于显式忽略该行非常有用,而不仅仅是希望它不被解释为可绘制的值。如果列标题中的行包含数字,该怎么办?它可能会尝试绘制它,这不是你想要的。
忽略不可插入的数据点可能很有用。您可以通过将值评估为NaN
(非数字)来过滤掉您不想要绘制的值。由于它无法绘制NaN
,因此忽略它。例如:
plot 'C://tmp/test.csv' using ($1<10 ? NaN : $1):2 with lines title "B"
只会绘制 x 值至少为10的那些点,忽略所有其他点,因为它们评估为NaN
,这是不可插图的。