Forum: PC Hard- und Software gnuplot datei plotten


von Vlad T. (vlad_tepesch)


Lesenswert?

Hi,

vielleicht kann mir jemand helfen

Ich habe ein Datenfile:
1
# zeit;datensatz;x;y;z
2
1301316428143;0;8.887277;-0.19153613;-0.30645782
3
1301316428149;4;-1.015;-1.1725;-1.155
4
1301316428150;0;9.346964;-0.11492168;-0.19153613
5
1301316428152;4;0.385;-3.15;-1.3825
6
1301316428155;1;-53.0625;-69.6875;24.0
7
1301316428156;0;9.078813;-0.34476504;-0.15322891
8
1301316428158;1;-52.0625;-73.6875;39.125
9
1301316428160;4;-0.245;-0.735;-1.5575
10
1301316428161;0;9.078813;-0.2681506;-0.2681506
11
1301316428164;1;-51.0;-72.6875;37.125
12
1301316428312;4;-0.945;-1.4;-2.1175
13
1301316428314;0;9.11712;-0.19153613;-0.19153613
14
1301316428322;4;-1.575;-0.28;-1.9425
15
1301316428323;0;9.11712;-0.11492168;-0.22984336
16
1301316428324;1;-51.75;-72.1875;35.375
17
...

in der Spalte datensatz ist codiert, um welches Datum es sich handelt

Ich möchte diese datei jetzt plotten, dass ich zB nur alle 4er 
Datensätze benutze oder von jedem Datensatz nur das x

ist das mit gnuplot möglich?
Ich benutze Windows.
sowas wie
1
plot "< egrep .*?;4;.* ..." using 1:3
scheint nicht zu funktionieren.

jemand eine Idee, die nicht beinhaltet aus jeder Datei x Dateien zu 
generieren?

Danke
vlad

von Stefan Salewski (Gast)


Lesenswert?

Ja wie war das noch? every?

Womöglich, schau mal ganz unten auf dieser Seite:

http://t16web.lanl.gov/Kawano/gnuplot/datafile2-e.html

Mit den ; als Datensatztrenner? Mag funktionieren, üblich ist ja eher 
Leerzeichen oder Tabulator. Und das Wählen der Spalten geht mit using, 
das ist schon richtig.

von Vlad T. (vlad_tepesch)


Lesenswert?

Stefan Salewski schrieb:
> Ja wie war das noch? every?
>
> Womöglich, schau mal ganz unten auf dieser Seite:
> http://t16web.lanl.gov/Kawano/gnuplot/datafile2-e.html
die Seite kenn ich ;)
every geht leider nicht, da die Datensätze mit verschiedenen Raten 
kommen und so keine Reihenfolge festgelegt ist.

>
> Mit den ; als Datensatztrenner? Mag funktionieren, üblich ist ja eher
> Leerzeichen oder Tabulator. Und das Wählen der Spalten geht mit using,
> das ist schon richtig.

set datafile separator ";"

von Stefan Salewski (Gast)


Lesenswert?

Mit Ruby lässt es sich jedenfalls einfach filtern:

stefan@AMD64X2 ~ $ cat bbb.txt
# zeit;datensatz;x;y;z
1301316428143;0;8.887277;-0.19153613;-0.30645782
1301316428149;4;-1.015;-1.1725;-1.155
1301316428150;0;9.346964;-0.11492168;-0.19153613
1301316428152;4;0.385;-3.15;-1.3825
1301316428155;1;-53.0625;-69.6875;24.0
1301316428156;0;9.078813;-0.34476504;-0.15322891
1301316428158;1;-52.0625;-73.6875;39.125
1301316428160;4;-0.245;-0.735;-1.5575
1301316428161;0;9.078813;-0.2681506;-0.2681506
1301316428164;1;-51.0;-72.6875;37.125
1301316428312;4;-0.945;-1.4;-2.1175
1301316428314;0;9.11712;-0.19153613;-0.19153613
1301316428322;4;-1.575;-0.28;-1.9425
1301316428323;0;9.11712;-0.11492168;-0.22984336
1301316428324;1;-51.75;-72.1875;35.375

stefan@AMD64X2 ~ $ ruby  -ne 'print if /^\d+;1/' bbb.txt
1301316428155;1;-53.0625;-69.6875;24.0
1301316428158;1;-52.0625;-73.6875;39.125
1301316428164;1;-51.0;-72.6875;37.125
1301316428324;1;-51.75;-72.1875;35.375

// begrenzt den regulären Ausdruck, ^ steht für den Anfang der Zeile, 
\d+ für mindestens eine Ziffer und ;1 dann für Semikolon gefolgt von 
Ziffer 1.

Mit grep habe ich es nicht hinbekommen. Oder war das Problem, dass 
gnuplot nicht die Ausgabe von grep fressen will? Ich habe gnuplot 
derzeit nicht installiert, aber die haben ja auch eine Mailingliste zum 
Fragen.

von Stefan Salewski (Gast)


Lesenswert?

>Mit grep habe ich es nicht hinbekommen.

Oder doch? Ist aber Linux.

stefan@AMD64X2 ~ $ grep '^[0123456789]*;1' bbb.txt
1301316428155;1;-53.0625;-69.6875;24.0
1301316428158;1;-52.0625;-73.6875;39.125
1301316428164;1;-51.0;-72.6875;37.125
1301316428324;1;-51.75;-72.1875;35.375

von Vlad T. (vlad_tepesch)


Lesenswert?

Stefan Salewski schrieb:
> Mit Ruby lässt es sich jedenfalls einfach filtern:

klar ist das filtern trivial, auch mit grep

head -n100 20110318-234039.log | egrep "^.*?;1;.*"

Stefan Salewski schrieb:
> Mit grep habe ich es nicht hinbekommen.
> Oder war das Problem, dass
> gnuplot nicht die Ausgabe von grep fressen will?

Das Problem ist, dass das windowsgnuplot das "< egrep ..." nicht 
interpretiert.

von Uhu U. (uhu)


Lesenswert?

Dann mach dir doch einen .bat-File, der die Ausgabe von egrep in eine 
Zwischendatei schreibt und gib die anschließend gnuplot zu fressen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Vlad Tepesch schrieb:
> plot "< egrep .*?;4;.* ..." using 1:3

Hey, das ist ja cool! Danke für den Tipp :)

Ich habe gar nicht gewusst, dass man in Gnuplot die Daten statt aus
Dateinamen auch aus Shell-Kommandos lesen kann. Es gibt allerdings eine
Einschränkung (Gnuplot-Manual):

  On systems with a popen function, the datafile can be piped through a
  shell command by starting the file name with a '<'.

Es könnte durchaus sein, dass Windows nicht popen kann ;-)

Evtl. hilft folgender Trick:
1
plot 'data' u 1:($2==1 ? $3 : 1/0)

Bei Linienplots werden diese aber an den auszublendenen Datenzeilen
unterbrochen, was wahrscheinlich nicht erwünscht ist. Bei Punkteplots
spielt dies keine Rolle.

Ansonsten bleibt für dich wohl nur der Weg über eine externe Filterung,
wie es schon einige vorgeschlagen haben oder der Umstieg auf Linux ;-)

von DirkB (Gast)


Lesenswert?

Versuch doch mal wgnuplot-pipes.exe

Aus README.Windows von gnuplot:
...
Binaries included:
------------------

* wgnuplot.exe: The default gnuplot executable.

* wgnuplot_pipes.exe: Like above, with the advantage of support for 
unixish
  features like
  plot `<awk -f change.awk data.dat`
  and the disadvantage of having attached a console window.
...

von DirkB (Gast)


Lesenswert?

Achja egrep oder grep wirst du dir noch besorgen müssen. (Gnutools oder 
cygwin oder ...)

von Vlad T. (vlad_tepesch)


Lesenswert?

Uhu Uhuhu schrieb:
> Dann mach dir doch einen .bat-File, der die Ausgabe von egrep in eine
> Zwischendatei schreibt und gib die anschließend gnuplot zu fressen.

ich wollt aber vermeiden, dass ich zu hundert Dateien, jeweils weitere 4 
mit redundanten Daten nur für die Darstellung anlegen muss.

DirkB schrieb:
> Versuch doch mal wgnuplot-pipes.exe

cool danke
es geht


DirkB schrieb:
> Achja egrep oder grep wirst du dir noch besorgen müssen. (Gnutools oder
> cygwin oder ...)

gnuwin32 - benutze ich schon seit Jahren
man muss nur ein paar sachen umbenennen, da es native Kommandos gleichen 
namens gibt (zB sort)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.