Forum: PC-Programmierung Gnuplot aus Shellscript aufrufen


von Иван S. (ivan)


Angehängte Dateien:

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

von Alfred (Gast)


Lesenswert?

Hallo,

plot ... with lines

wirds machen. Genaueres im Manual :-)

Beste Grüße

Alfred

von Иван S. (ivan)


Lesenswert?

Alfred schrieb:
> plot ... with lines

Selbiges geht bei Verwendung von multiplot genau eben nicht. :-(

von Иван S. (ivan)


Lesenswert?

Es funktioniert übrigens auch mit dem normalen plot nicht, folgendes 
macht zum Beispiel eine leere Anzeige:
1
#!/bin/sh
2
  echo "set xrange [0:20]"
3
  echo "set yrange [0:1]"
4
while read l ; do
5
  echo "set nokey"
6
  echo "plot \"< echo '$l'\" with lines"
7
  sleep 0.1
8
done

von Captain S. (captainsubtext)


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

von Иван S. (ivan)


Angehängte Dateien:

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

von Иван S. (ivan)


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

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.