(如果这是重复的话我不会感到惊讶,但我找不到合适的搜索词来查找它)
我有一个表格的数据文件(简化了一点):
date time label value
2013-03-17 10:09:28 thing 1 54
2013-03-17 10:09:32 thing 2 20
2013-03-17 10:10:02 thing 3 35
2013-03-17 10:10:03 thing 1 59
2013-03-17 10:10:21 thing 1 64
2013-03-17 10:10:37 thing 3 37
2013-03-17 10:10:37 thing 2 40
2013-03-17 10:10:42 thing 3 41
2013-03-17 10:10:44 thing 2 59
...我想要做的是创建一个多线图,每个'事物1','事物2'和'事物3',并让Gnuplot自动标记它们。
如果我将文件拆分为单独的数据集,每个标签一个,那么我知道我可以做这样的多线图:
set timefmt '%Y-%m-%d %H:%M:%S';
set xdata time;
plot 'thing1.txt' using 1:3 title 'thing 1', \
'thing2.txt' using 1:3 title 'thing 2'
......然而这似乎有点矫枉过正。这可以通过Gnuplot实现,而无需将文件拆分为单独的每个数据集文件吗?实际上,大约有200个单独的标签,因此如果Gnuplot可以自动标记,它将节省大量的数据手动预处理。
答案 0 :(得分:0)
是的,你可以这样做:
plot for [i=1:300] 'thing.txt' using 1:(($4 == i)? $3:NaN) title 'thing '.i
这不是最有效的(我很确定gnuplot会将你的文件读取300次),但它会完成工作。
答案 1 :(得分:0)
尽管@ mgilson的答案可行,但如果数据很大,则可能会非常慢,因为它会读取文件300次。
我认为手工贴标签效率更高。如果标签是数字,我们可以使用它们来选择颜色。例如,以下行将在第1列上绘制第5列,其中颜色从第4列中选择,标签通过绘制具有常数值NaN(1/0)的虚线来放置
plot 'thing.txt' u 1:5:4 pt 7 lc variable notitle,\
for [i=1:300] 1/0 w p pt 7 lc i title 'thing '.i
请注意,默认情况下,gnuplot颜色是循环的,即每N行颜色将重复(通常,N = 9)。如果您需要不同的颜色,则需要手动设置300个案例中的每一个。为了自动执行此操作,this question in SO提供了一些很好的方法。