2009-11-13 7 views
12

Ich habe ein paar Daten.Gnuplot kumulative Spalte Frage

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

Ich mag die kumulative Abstand wrt Zeit in gnuplot plottet ... (es sollte einfach sein), aber ich weiß nicht, wie.

x

+0

Hmm ... die Spalten wurden in HTML formatiert ... okay ... bitte nehmen Sie jedes Zeilenpaar als Spaltenpaar ... x – Xofo

+1

Okay, jemand hat es repariert ... aah die Freude, ein SO-Noob zu sein . – Xofo

+0

@Xofo, fügen Sie einfach 4 Leerzeichen vor jeder Zeile hinzu und die Zeichen sind gleichmäßig verteilt. Es gibt mehr Lösungen, aber das funktioniert ;-). Und willkommen in SO. –

Antwort

1

Ich habe ein wenig Erfahrung mit Gnuplot und ich brütete gerade über die Dokumentation einiger. Leider konnte ich beim Plotten keine Lösung zum Generieren einer kumulativen Summe finden.

Ich denke, was Sie tun müssen, ist Ihre Daten mit einem anderen Programm zu massieren, bevor Sie Gnuplot lassen. awk ist ein Programm, das in den Sinn kommt, es ist praktisch gebaut, um mit spaltenförmigen Daten zu fummeln. Sie können diesen Prozess in den Plotvorgang integrieren, indem Sie these instructions folgen.

+0

@Carl, tut mir leid, ich habe versehentlich Ihre Antwort implementiert! Ich wünschte, SO wäre etwas schneller mit diesen "Neue Antwort Posted" Nachrichten. – Mark

+0

Es tut mir leid, ich bin geschmeichelt, dass mein Vorschlag ist, was für Sie gearbeitet hat! Glückliches Hacken. –

6

Ihre Daten Angenommen, in einer Datei „test.txt“, wie etwa:

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

Danke ... Ich werde es versuchen. – Xofo

+0

Ich habe festgestellt, dass DIESE nicht sauber funktioniert, wenn Sie FLOATING POINT PAIRS haben.Der Fehler I erhielt, war: awk: (Dateiname = out.txt FNR = 131) fatal: Druck auf "Standard-Ausgabe" nicht bestanden (Broken pipe) ^ Bad Daten auf Leitung 1 --- – Xofo

+0

Hm, I habe es gerade mit Floats probiert und es hat für mich geklappt. Was ist in deiner Leitung 1? Ist es der Header? Versuchen Sie vielleicht, das zu entfernen. – Mark

6

Das gleiche gilt von der „kumulativen“ Variante der „smooth“ Option erreicht wird (nur help smooth in gnuplot eingeben).

23

Für alle noch für diese Art der Sache suchen, wenn Ihre gnuplot-Version 4.4 oder höher ist, können Sie folgendes tun:

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

Ich führe gnuplot 4.4 Patchlevel 2, Ihr Skript führt zu einer "undefinierten Variable: ein" Fehler für mich. – Thomas

+4

@Thomas - Sind Sie sicher, dass Sie sich an die 'a = 0' oben erinnert haben? – mgilson

+0

Ups, ich kann nicht glauben, dass ich das nicht gesehen habe. Es funktioniert gut. Danke, Kumpel, jetzt fühle ich mich dumm. :-) – Thomas

11

Wenn Sie Ihre Daten in der Datei Daten-Datei ist, können Sie eine kumulative tun Grundstück in etwa so:

$ gnuplot 
gnuplot> plot "datafile" smooth cumulative 
0

Dies ist nicht das, was die Frage nach sucht, sondern „gnuplot Funktion kumulative Verteilung“ immer führt mich hier und keine der Antworten ist ganz richtig, wenn Sie bereits die Daten gnuplot haben erwartet.

Angenommen, Sie wollten eine kumulative Verteilungsfunktion von nur Entfernungen und haben nur die rohen Entfernungen. Es gibt einen kleinen Trick, mit dem gnuplot die y Werte berechnen kann:

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

Es ist nicht so flexibel wie mit den ganzen Daten, obwohl.