= Benutzung von GnuPlot = detailliert ist alles nachzulesen im [[ftp://ftp.gnuplot.info/pub/gnuplot/gnuplot.pdf.gz|gnuplot-Handbuch]] (gzipped) alles in Kürze findest Du hier: http://www.duke.edu/~hpgavin/gnuplot.html kompliziertere Tricks gibts bei: http://t16web.lanl.gov/Kawano/gnuplot/index-e.html == die wichtigsten Befehle im Überblick == mit '''gnuplot ''' startest Du den interaktiven Modus - alles laesst sich aber natuerlich auch per Skript reingeben ('''gnuplot name_des_skripts.plt''') [einen großen Teil der folgenden Auflistung habe ich http://ieee.uow.edu.au/documents/gnuplot/gnuplot entnommen ...] * '''set xrange [-5:5]''' * '''set yrange [-2:4]''' * '''set grid''' / '''set nogrid''' - die Rasterung * '''set key''' / '''set nokey''' - die Legende * '''set autoscale''' ueberschreibt alle xrange- und yrange-Festlegungen * '''set size {{no}square | ratio | noratio} {,}''' * '''set output "filename"''' - aufeinanderfolgende Plots landen in derselben Datei, bis ein anderer '''terminal''' ausgewählt wird * '''help''' * '''exit''' * '''set term TYPE''' legt die Ausgabe fest: * dutzende Formate: postscript, png, x11, windows, latex, corel, fig, ... * die komplette Liste siehst Du mit '''set terminal''' * '''load ''' - laed eine Datei mit gnuplot Befehlen & fuehrt diese aus == der plot-Befehl == * der erste Parameter ist eine Funktion oder ein Dateiname (in Anführungsstrichen) * ein leerer Dateiname (also nur die Anfuehrungsstriche) entsprechen der letzten benutzten Datei * danch kann Folgendes erscheinen: * '''index''' * es gibt diese drei Varianten, um "Zeilen" aus einer Datendatei auszuwählen: * N - nur den n-ten Datensatz * N:M - alle Datensätze von n bis m * N:P:M - von n ausgehend jeden p-ten Datensatz bis m * '''every''' * Syntax: '''PunktIncrement:BlockIncrement:StartPunkt:StartBlock:EndPunkt:EndBlock''' * jedes einzelne davon kann auch wegfallen - dann muessen fuehrende ''':''' aber stehen bleiben (abschliessende ''':''' dagegen muessen weggelassen werden) * Blöcke werden in der Datendatei durch Leerzeilen getrennt * innerhalb jedes Blockes können (in Abständen) also Punkte ausgewählt werden * '''smooth''' * Werte: unique, csplines, acsplines, bezier oder sbezier * '''unique''' ersetzt alle Punkte, die an derselben x-Stelle dargestellt werden würden durch einen Punkt mit gemitteltem y-Wert * die Anderen berechnen die jeweilige Kurve zwischen den Endpunkten * in jedem Fall werden die Punkte nicht mehr einzeln dargestellt, sondern verbunden * '''using''' * dies ist der gebräuchlichste Parameter * '''X:Y''' bedeutet, dass Spalte Y gegen Spalte X dargestellt werden soll * die Zählung der Spalten beginnt hier mit Eins * eine Null als Spaltennummer ergibt die Zeilennummer jedes Datensatzes * dabei können auch Berechnungen verwendet werden: * '''0:2''' bzw. ''':2''' - Spalte zwei wird über der Datensatz-Nummer aufgetragen * '''1:($2+$3)''' - die Summe von Spalte 2 und 3 wird gegen Spalte 1 dargestellt * '''1:($3>10 ? $2 : 1/0)''' - falls der Wert in Spalte 3 größer als 10 ist, wird Spalte 2 ausgegeben, ansonsten wird der Punkt ignoriert (wegen Division durch Null) * '''($0/1000):$2''' - die Datensatz-Nummern werden um den Faktor 1000 verkleinert * die Werte werden über die C-Funktion '''scanf''' eingelesen - dazu können Parameter in Anführungsstrichen übergeben werden * '''t''' * anschliessend folgt die Beschriftung der Datenreihe fuer die Legende in Anfuehrungsstrichen * mehrere Kurven in den selben Graphen bekommst Du folgendermassen: `plot "data/input1.csv" using 0:1 ,\\` ` "" using 0:2 ,\\` ` "data/input2.csv" using 0:1` * die Reihenfolge der '''plot'''-Parameter ist relevant: "index, every, using, smooth" - die Anderen musst Du selbst ausprobieren ... == Achsenformatierung == * mit '''set xtics''' laesst verschiedene Varianten zu: * '''X''' - in Schritten von X * '''X,Y''' - ab X in Schritten von Y (bis unendlich) * '''X,Y,Z''' - ab X in Schritten von Y bis Z * '''(1,2,4,8,16,32)''' - die gegebenen Stellen beschriften * '''("text_fuer_wert_1" 1, "text_fuer_wert_2" 2, "text_fuer_wert_3" 3)''' - Texte speziellen Werten zuordnen * '''set xtics rotate ???''' * ansonsten: * '''set logscale x''' * '''set format x ""''' * auch mit single-quote, um ein paar Ersetzungen zu unterdrücken * Formatbeispiele: * '''%f''' - Fließkomma (z.B.: '''%+-8.2f''' -> "+123.00 ") * '''%e''' / '''%E''' - exponential * '''%x''' / '''%X''' - hexadezimal * '''%o''' / '''%O''' - oktal * '''%T''' - Potenz zur Basis 10 * '''%S''' - wissenschaftliche Potenz * '''%P''' - Vielfaches von Pi * ansonsten: siehe [[ftp://ftp.gnuplot.info/pub/gnuplot/gnuplot.pdf.gz|gnuplot-Handbuch]], Kapitel 34.16 - ''Format'' == Beschriftungen (labels) == Syntax: `set label {} {""} {at } {} {{no}rotate} {font "<,size>"}` `set nolabel {}` tag:: Zahl, die das Label identifiziert (fuer nachträgliche Änderung/Löschung); kann weggelassen werden label-text:: für Zeilenumbrüche, wie üblich, "'''\n'''" (oder "'''\\'''" für tex u.ä.) position:: zwei- oder dreimensionale Koordinaten, eventuell mit dem Präfix '''first''', '''second''', '''graph''' oder '''screen''' justification:: '''left''', '''right''' oder '''center''' == Beispiele == === response-time beim Silimann 6 === {{{ set terminal postscript eps color set yrange [1:4] set ytics 1,0.25,4 set format y "%4.2f" set grid set xlabel "TIME [us]" set ylabel "VOLTAGE [V]" set nokey set size square set title "RESPONSE TIME FOR +0,1V STEP" set output "F1.ps" plot "/tikal/public/RUNS/Silimann6/Messdaten/response_time/Rohdaten/importierbares_format/F1/D01.CSV" every ::900::6900 using ($0/1000):1 smooth unique }}} === kleine Sachen === durchgezogene geglättete Linien mit manueller Legenden-Bennenung:: plot "scanpfad.dat" using 3:($4*1000) smooth csplines t "analog-positiv" w lines die Legende außerhalb des Graphen in eine Box stecken:: set key outside box die Achsenrichtung umkehren (weiterhin automatische Auflösung):: set xrange [*:*] reverse die Achsenbeschriftung um 90 Grad drehen:: set xtics rotate ("Eingangspegel-Aenderung" 0, "Scanpfad-Aktivierung" 1, "Dauer-Refresh" 2, "unbelastet" 3) ein mehrzeilige Beschriftung:: unix-gemaess durch Einfügen eines Zeilenumbruchs '''\n''' oder '''\\''' fuer tex o.ä. encapsulated postscript:: '''set terminal postscript eps color''' (sogar mit Farbe) Ausgabe in mehreren Formaten:: nach dem Plot-Befehl eine neue Ausgabedatei ('''set output''') und das Format ('''set terminal''') festlegen, anschließend: '''replot''' Funktionen:: '''plot sin(x)*x''' - alle weiteren Funtionen unter '''help functions''' png-Bildformat:: folgende Parameter stehen zur Verfügung: {small | medium | large} {{no}transparent} {monochrome | gray | color}; Standard ist kleine Schrift, keine Transparenz und viel Farbe das Aussehen einzelner Bildpunkte veraendern:: set data style [lines|...] Punkte auslassen:: '''plot "datei.csv" every 10 using 0:1''' Sonderzeichen:: durch das Uebliche '''\NNN''', wobei NNN eine Oktal-Zahl darstellt - die dazugehoerigen Zeichen lassen sich auf der Konsole beispielsweise durch folgende Eingabe anzeigen: '''i=0; while [ $i -lt 8 ]; do j=0; while [ $j -lt 8 ]; do k=0; while [ $k -lt 8 ]; do echo -e "$i$j$k\t\\$i$j$k"; k=$(($k+1)); done; j=$(($j+1)); done; i=$(($i+1)); done|less''' - nun einfach per Schraegstrich (slash) nach dem geuenschten Zeichen suchen; z.B. entspricht das Grad-Zeichen (von "Grad Celsius") dem Code '''\260''' === aktualisierte Grafik === ;Es soll alle zehn Sekunden eine Logdatei ausgelesen und die Grafik dazu aktualisiert werden. scriptdatei erstellen:: *plot "/var/log/temperatures1", "/var/log/temperatures2" *pause 10 *reread dann starten:: $gnuplot scriptdatei