0

私はこのようなデータのセットを持っています

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 2466666666666666666 265
7 372 284
8 313 290
9 258 297

ラベルに最初の列を使用し、(x,y) プロットに 2 番目と 3 番目の列を使用したいのですが、繰り返しなしで 1 つの時間ラベルのみをプロットしたいと思います。どうすればいいですか?

ご協力ありがとう御座います。

4

1 に答える 1

2

次のようなものが欲しいですか:

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

...「反復せずに一度だけラベルをプロットしたい」というのが何を意味するのかよくわかりません...

一意のラベルを 1 つだけ取りたいようです。たとえば、 であるラベルは 1 つだけ0、 であるラベルは 1 つだけなどです。簡単にするために、最初のラベルを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
于 2012-11-09T04:00:07.457 に答える