Gnuplot - 使用另一个字段作为标签绘制文件

时间:2013-04-03 14:22:11

标签: gnuplot

(如果这是重复的话我不会感到惊讶,但我找不到合适的搜索词来查找它)

我有一个表格的数据文件(简化了一点):

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可以自动标记,它将节省大量的数据手动预处理。

2 个答案:

答案 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提供了一些很好的方法。