【发布时间】:2016-06-02 06:37:41
【问题描述】:
我有一个由另一个 3rd 方应用程序创建的 .csv 数据文件,应该使用 gnuplot 绘制。
假设该文件具有以下格式:
1;2;3;4;5;6 <-- This is the header line that should be ignored (with values 1;2;...;N)
1;1;2;1;1;1
2;3;3;3;5;6
3;4;1;1;1;4
第一列是 x 轴,以下列各应绘制为自己的线图(是的,我知道,一个图中的线图过多可能看起来很糟糕,但只是为了了解一下)。这里是一个 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 "A",\
'C://tmp/test.csv' using 1:3 with lines title "B",\
'C://tmp/test.csv' using 1:4 with lines title "C",\
'C://tmp/test.csv' using 1:5 with lines title "D",\
'C://tmp/test.csv' using 1:6 with lines title "E"
问题是,这也将第一行绘制为数据。
我知道可以通过以# 开头来忽略数据文件中的任何行,例如#1;2;3;4;5;6,但我不想编辑该文件,因为它也被其他工具使用。
另一种方法是使用plot <filename> every ::1 忽略第一行,这意味着我必须在上述脚本中包含every ::1 5 次,如in this link 所述。如下所示:
set terminal png size 1000,500
set datafile separator ";" # CSV file is seperated with ;
plot \
'C://tmp/test.csv' every ::1 using 1:2 with lines title "A",\
'C://tmp/test.csv' every ::1 using 1:3 with lines title "B",\
'C://tmp/test.csv' every ::1 using 1:4 with lines title "C",\
'C://tmp/test.csv' every ::1 using 1:5 with lines title "D",\
'C://tmp/test.csv' every ::1 using 1:6 with lines title "E"
为每个情节定义every ::1真的是唯一的方法吗?是否有一些更短 - 更可取的单行 - 忽略第一(n)行的方法?某种方式来定义every ::1“全局”或类似(伪代码)set datafile ignorefirstnlines 1?
【问题讨论】:
-
every ::1真的那么糟糕吗?这对我来说似乎很优雅。标题字符串"B"、"C"等来自哪里?它们是列标题吗? -
不是“那么糟糕”,但如果这可以在一个语句中而不是在每个情节中完成,我会发现它更优雅。如果我想象一个带有 5 个不同条形和附加误差线的条形图,这将导致 10 个绘图语句,因此有 10 个
every ::1。是的,"A"、"B"等只是应显示在键/图例中的示例列标题。 -
你知道情节迭代吗?在
gnuplot提示符下键入help plot iteration。 -
我目前正在外出途中,但我会在回家时考虑一下,谢谢!