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

Gnuplot: Why is the first line automatically ignored in my datafile

我有一个.csv数据文件,应使用gnuplot进行绘制。
假设文件具有以下格式:

1
2
3
4
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:

1
2
3
4
5
6
7
8
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次,如本链接所述。

不过,以上脚本可以正常运行并创建有效的.png,从而自动忽略.csv中的第一行。

我知道"为什么还要打扰一下"?但是我一直想知道发生了什么,所以:为什么会发生这种情况? gnuplot中是否有更改,因此它可以自动检测标题行,并且不再需要在.csv中注释标题行?


不是gnuplot会将第一行识别为标题或标签,只是没有从第一行进行绘制的有效点。您将在哪里绘制点(A,B)?它没有价值。 (2,3)是可以绘制的点,但不能绘制(A,B)。由于这不是有效的点,因此将其忽略。

尝试删除输入文件的所有其他行,以使其仅读取

1
A;B;C;D;E;F

这将警告它"正在跳过没有有效点的数据文件"。

注释(以#开头的行)可用于显式忽略该行,而不仅仅是希望它不会被解释为可打印的值。如果列标题行中有数字怎么办?它可能会尝试绘制它,这不是您想要的。

忽略不可绘制的数据点可能很有用。您可以通过将不需要的值求值为NaN(不是数字)来过滤掉这些值。由于无法绘制NaN,因此将其忽略。例如:

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

仅会绘制x值至少为10的那些点,而忽略所有其他点,因为它们的值为NaN,这是不可绘制的。