Gnuplot:为什么我的数据文件中会自动忽略第一行

时间:2016-02-20 16:20:13

标签: plot 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每个应该绘制为自己的线图(是的,我知道,一个图中的太多线图可​​能看起来很糟糕,但只是为了得到一个想法)。这是一个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中注释标题行吗?

1 个答案:

答案 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,这是不可插图的。