Gnuplot aus Shellscript aufrufen

#2061732
Lesenswert?

Schoenen Sonntag allerseits,

ich habe eine Textdatei mit Punktkoordinaten, diese Punktkoordinaten 
lese ich via Shellscript ein und gebe sie an gnuplot aus. Der Grund, 
warum ich dazu überhaupt ein Script benutze ist jener, weil Gnuplot 
keine Pause beim Plotten von mehreren Punkten hat, allerdings möchte ich 
diesen dynamischen Effekt nicht missen.

Das Problem ist nun, daß meine Script-Gnuplot-Kombination zwar 
einwandfrei funktioniert, die Punkte also genau so nach einander 
ausgegeben werden wie gewünscht, ich es allerdings nicht fertig bekomme, 
eine Linie aus diesen Punkten zu zeichnen.

Mein Script zeichnet jeden Punkt als einzelnen Plot, das Ergebnis ist 
ein Multiplot. Das Problem dürfte der Multiplot sein.

Ich bitte um Hinweise auf einen Würgaround!

Hier noch das Script
Aufruf: (./plotter.sh | gnuplot -persists) < file.name
1
#!/bin/sh
2
  echo "set xrange [0:20]"
3
  echo "set yrange [0:1]"
4
  echo "set multiplot"
5
while read l ; do
6
  echo "set nokey"
7
  echo "plot \"< echo '$l'\""
8
  sleep 0.1
9
done

Gibt mit folgenden Daten das Ergebnis im Anhang:
1
 0 0 
2
 1 0.3679 
3
 2 0.6065 
4
 3 0.7165            
5
 4 0.7788            
6
 5 0.8187            
7
 6 0.8465            
8
 7 0.8669            
9
 8 0.8825            
10
 9 0.8948            
11
10 0.9048            
12
11 0.9131            
13
12 0.92            
14
13 0.926            
15
14 0.9311            
16
15 0.9355            
17
16 0.9394            
18
17 0.9429            
19
18 0.946            
20
19 0.9487            
21
20 0.9512
Angehängte Dateien:
#2061804
Lesenswert?

Gnuplot behandelt deine zeilenweisen Eingaben wohl als einzelne Kurven?

Von daher: Was hältst du davon, bei jedem Plot einer Zeile immer auch 
den vorherigen Punkt mit zu übergeben? Dann könnte gnuplot eine nette 
Linie zwischen die beiden Punkte setzen.

Ich behersche zwar keine bash-Programmierung, aber so in etwa stelle ich 
mir die Sache vor: (meine Änderungen sind mit -> markiert)
1
#!/bin/sh
2
  echo "set xrange [0:20]"
3
  echo "set yrange [0:1]"
4
  echo "set multiplot"
5
->$l = "0 0";
6
while read l ; do
7
  echo "set nokey"
8
->echo "plot \"< echo '$l , $x'\""
9
  sleep 0.1
10
->$x = $l
11
done
#2061826
Lesenswert?

Captain Subtext schrieb:
> Was hältst du davon, bei jedem Plot einer Zeile immer auch
> den vorherigen Punkt mit zu übergeben? Dann könnte gnuplot eine nette
> Linie zwischen die beiden Punkte setzen.

Vielen Dank, die Idee ist großartig und es funktioniert auch 
einwandfrei. Vielleicht baue ich morgen noch einen dritten Punkt dazu 
ein, dann kann ich auch glatte Kurven mittels Gnuplot-Polygonfunktionen 
nutzen.

> Ich behersche zwar keine bash-Programmierung, ...

Ich auch nicht, deshalb hab' ich auch mehr als eine halbe Stunde 
gebraucht, das Ganze umzuschreiben.

Nochmals vielen herzlichen Dank, Iwan
1
#!/bin/sh
2
  echo "set xrange [0:20]"
3
  echo "set yrange [0:1]"
4
  echo "set multiplot"
5
  old="0 0"
6
while read l ; do
7
  echo "set nokey"
8
  echo "plot \"< echo '$l'; echo '$old'\" with lines"
9
  old=$l
10
  sleep 0.1
11
done
Angehängte Dateien:
#2069725
Lesenswert?

iwan schrub:
> Vielleicht baue ich morgen noch einen dritten Punkt dazu ein...

JFTR: Die Idee, mehr als 2 Variablen zum Plotten zu nehmen war nicht 
ideal, man bekommt dann nämlich mehrere (ähnliche und 
nebeneinanderliegende) Graphen.

Leider kann ich keine Bilder bereitstellen, da ich derzeit auf einem 
Read-Only-System arbeiten muß, aber ich glaube, daß man sich das auch 
ohne Bild vorstellen kann.

Gruß, Iwan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren