2009-11-13 22 views
12

Mam pewne dane.Gnuplot Cumulative Column Question

#Time Distance 
1 3 
2 5 
4 9 
8 11 
12 17 
14 20 
16 34 
20 40 

Chcę wykreślić skumulowanego czasu wrt odległość w gnuplot ... (to powinno być łatwe), ale nie wiem jak.

x

+0

Hmm ... kolumny zostały sprowadzone HTML ... dobrze ... proszę, weź każdą parę wierszy jako parę kolumn ... x – Xofo

+1

Dobra osoba naprawiła ... . – Xofo

+0

@Xofo, po prostu dodaj 4 spacje przed każdą linią, a znaki są równomiernie rozmieszczone. Jest więcej rozwiązań, ale to działa ;-). Witamy w SO. –

Odpowiedz

1

Mam małe doświadczenie z Gnuplot a ja po prostu rozmieścisz dokumentacji pewnym. Niestety, nie udało mi się znaleźć rozwiązania do generowania łącznej sumy podczas tworzenia wykresu.

Myślę, że trzeba masować swoje dane innym programem, zanim pozwolisz sobie na Gnuplot. awk to jeden program, który przychodzi na myśl, jest praktycznie zbudowany do manipulowania danymi kolumnowymi. Możesz zintegrować ten proces z procesem kreślenia, postępując zgodnie z these instructions.

+0

@Carl, przepraszam, niechcący zaimplementowałem twoją odpowiedź! Chciałbym, aby WIĘCEJ było trochę szybciej z tymi wiadomościami "Wysłano nową odpowiedź". – Mark

+0

Nie przepraszaj, jestem zaszczycony, że moja sugestia jest dla ciebie najlepsza! Szczęśliwy hacking. –

6

Zakładając, że dane są w pliku „Test.txt”, jak o:

plot "<awk '{i=i+$2; print $1,i}' test.txt" with lines 
+0

Dzięki ... spróbuję tego. – Xofo

+0

Znalazłem, że TO nie działa czysto, jeśli masz PŁYWAJĄCE PUNKTY.Błąd Dostałem: awk (FILENAME = out.txt FNR = 131) fatalnym: print na "standardowe wyjście" Failed (rura broken) ^ Bad danych on line 1 --- – Xofo

+0

Hmm, po prostu wypróbowałem to przy pomocy pływaka i zadziałało to dla mnie. Co masz na linii 1? Czy to nagłówek? Spróbuj może to usunąć. – Mark

6

To samo można osiągnąć przez „zbiorczej” wariantu opcją „gładkiej” (Wystarczy wpisać help smooth w gnuplot).

23

Dla każdego, wciąż szuka tego typu rzeczy, Jeśli wersja gnuplot jest 4.4 lub nowszy, można wykonać następujące czynności:

a=0 
#gnuplot 4.4+ functions are now defined as: 
#func(variable1,variable2...)=(statement1,statement2,...,return value) 
cumulative_sum(x)=(a=a+x,a) 
plot "test.dat" using 1:(cumulative_sum($2)) 
+0

Używam gnuplot 4.4 patchlevel 2, twój skrypt powoduje błąd 'undefined variable: a' dla mnie. – Thomas

+4

@Thomas - Czy na pewno pamiętasz "a = 0" na górze? – mgilson

+0

Ups, nie mogę uwierzyć, że tego nie widziałem. Działa dobrze. Dzięki, stary, teraz czuję się głupio. :-) – Thomas

11

Jeśli dane są w pliku danych plików, można zrobić zbiorczą Działka tak:

$ gnuplot 
gnuplot> plot "datafile" smooth cumulative 
0

to nie jest kwestia tego, co szuka, ale „gnuplot dystrybuantę” zawsze prowadzi mnie tutaj, a żadna z odpowiedzi są całkiem w porządku, chyba że masz już gnuplot dane spodziewa.

Ale przypuśćmy, że chcesz mieć dystrybuowaną funkcję o odległościach tylko i mają one tylko surowe odległości. Jest mały trick z których gnuplot można obliczyć wartości y:

test.dat:

#Time Distance 
1 3 
2 5 
4 9 
8 11 
12 17 
14 20 
16 34 
20 40 

plot.gpi:

datafile = test.dat 
stats datafile 
plot datafile using 2:(1./STATS_records) smooth cumulative title "distance" 

enter image description here

To nie jest tak elastyczny, jak mające wszystkie dane.