Gnuplot:将按行和命名的数据绘制为不同颜色和标题的线束

Gnuplot:将按行和命名的数据绘制为不同颜色和标题的线束,gnuplot,Gnuplot,我正在尝试绘制一组图形,这些图形当前以如下方式存储: plot for[blockIndex=0:3] "MyFile.txt" matrix index blockIndex every ::1 w lp title "".blockIndex MyFile.txt "ID01" 1 2 3 4 5 "ID02" 3 4 5 6 7 8 9 "ID03" 4 3 1 2 3 4 这样,有一行标题为“ID01”,仅显示第一行,另一行标题为“ID02”,依此类推。如果线条以不同颜色显示,则可获

我正在尝试绘制一组图形,这些图形当前以如下方式存储:

plot for[blockIndex=0:3] "MyFile.txt" matrix index blockIndex every ::1 w lp title "".blockIndex
MyFile.txt

"ID01" 1 2 3 4 5
"ID02" 3 4 5 6 7 8 9
"ID03" 4 3 1 2 3 4
这样,有一行标题为“ID01”,仅显示第一行,另一行标题为“ID02”,依此类推。如果线条以不同颜色显示,则可获得额外积分。非常感谢您的帮助

我已经做到了这一点

plot for[blockIndex=0:3] "MyFile.txt" matrix index blockIndex every ::1 w lp title "".blockIndex
如果在数据文件的行之间插入空行(我可以这样做),则生成下图

剩下的问题是

a) 我绝对不会将ID字符串显示为标题(columnheader显然不适合矩阵模式)。我目前使用块索引,它可以作为权宜之计,但不是完成脚本的选项。我可以选择在数据文件中以不同的方式排列ID字符串(即,根据columnheader分隔注释行…)——唯一的要求是所有行数据都应该在一个文件中

b) 我收到大量的“矩阵包含缺少或未定义的值”警告,这大大降低了图像在屏幕上的显示速度


这不是gnuplot保存数据的方式。您的方法还存在其他问题,即,如果行具有不同点数等,您实际上没有矩阵。处理此类数据的gnuplot方法是使用两个空行分隔属于不同行的点,并在以下内容之前添加相应的标题:

"ID01"
1
2
3
4
5


"ID02"
3
4
5
6
7
8
9


"ID03"
4
3
1
2
3
4
然后用

set key autotitle columnheader left
plot for [i=0:2] 'MyFile.txt' using 0:1 index i with linespoints

或者,如果您喜欢更紧凑的表示,可以将每一行保存在一列中。但您必须确保较短的列中填充了空值。为此,应使用逗号作为字段分隔符:

"ID01","ID02","ID03"
1,3,4
2,4,3
3,5,1
4,6,2
5,7,3
 ,8,4
 ,9,
策划

set key autotitle columnheader
set datafile separator ','
plot for [i=1:3] 'MyFile.csv' using 0:i with linespoints

好的,谢谢。我希望我能保留好的紧凑行表示法,但是你的方法做了我需要的一切。在我看来,这种方法给了你更多的灵活性。我对答案进行了编辑,为您提供了另一种方法。