www.mikrocontroller.net

Forum: PC-Programmierung Gnuplot aus Shellscript aufrufen


Autor: Иван S. (ivan)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
#!/bin/sh
  echo "set xrange [0:20]"
  echo "set yrange [0:1]"
  echo "set multiplot"
while read l ; do
  echo "set nokey"
  echo "plot \"< echo '$l'\""
  sleep 0.1
done

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

Autor: Alfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

plot ... with lines

wirds machen. Genaueres im Manual :-)

Beste Grüße

Alfred

Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alfred schrieb:
> plot ... with lines

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

Autor: Иван S. (ivan)
Datum:

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

Autor: Captain Subtext (captainsubtext)
Datum:

Bewertung
0 lesenswert
nicht 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)
#!/bin/sh
  echo "set xrange [0:20]"
  echo "set yrange [0:1]"
  echo "set multiplot"
->$l = "0 0";
while read l ; do
  echo "set nokey"
->echo "plot \"< echo '$l , $x'\""
  sleep 0.1
->$x = $l
done

Autor: Иван S. (ivan)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
#!/bin/sh
  echo "set xrange [0:20]"
  echo "set yrange [0:1]"
  echo "set multiplot"
  old="0 0"
while read l ; do
  echo "set nokey"
  echo "plot \"< echo '$l'; echo '$old'\" with lines"
  old=$l
  sleep 0.1
done

Autor: Иван S. (ivan)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.