1

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

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

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

4

2 回答 2

0

是的,你可以这样做:

plot for [i=1:300] 'thing.txt' using 1:(($4 == i)? $3:NaN) title 'thing '.i

这不会是最有效的(我很确定 gnuplot 会读取您的文件 300 次),但它会完成工作。

于 2013-04-03T17:20:10.797 回答
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 个箱子中的每一个。为了自动执行此操作,SO 中的这个问题提供了一些好的方法。

于 2015-09-24T02:56:37.003 回答