如何在GNUplot中仅使用标签绘制迭代坐标(x,y)数据?

时间:2012-11-09 03:24:39

标签: gnuplot

我有这样的数据集

  

0 268 195
  1 353 199
  2 318 209
  3 268 232
  4 370 238
  5 326 253
  6 246 265
  7 372 284
  8 313 290
  9 258 297
  0 268 196
  1 353 199
  2 318 209
  3 268 233
  4 370 238
  5 325 253
  6 246 265
  7 372 284
  8 313 290
  9 258 297

我想使用第一列用于标签,第二列和第三列用于(x,y)图,但是,我想只绘制一次没有迭代的时间标签。我该怎么办?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你想要这样的东西:

plot 'datafile' u 2:3:1 with labels

......我不太确定你的意思是“我想只绘制一次没有迭代的标签”......

在我看来,你只想要一个独特的标签。例如。只有一个标签是0,只有一个标签是1等。为简单起见,我将采用第一个带有小python脚本:

#test.py
import sys

seen = set()
with open(sys.argv[1]) as f:
    for line in f:
        num,rest = line.split(None,1)
        if num not in seen:
            seen.add(num)
            sys.stdout.write(line)

现在我们可以在gnuplot中绘制文件:

plot '< python test.py yourdatafile' u 2:3:1 w labels

以下是test.py的版本,它会对具有相同“值”的所有标签的位置进行平均。

import sys
from collections import defaultdict

d = defaultdict(list)
with open(sys.argv[1]) as f:
    for line in f:
        num,x,y = map(int,line.split())
        d[num].append((x,y))

#now average
for k,v in d.items():
    x,y = zip(*v)
    avg_x = float(sum(x))/len(x)
    avg_y = float(sum(y))/len(y)
    print k,avg_x,avg_y