spezial:gnuplot

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
spezial:gnuplot [07.03.2013 20:51]
tquaritsch [Der erste Graph]
spezial:gnuplot [28.11.2013 19:53] (aktuell)
tquaritsch [Mac OS X] fixed broken link
Zeile 7: Zeile 7:
 </​html>​ </​html>​
 {{:​spezial:​example-1.png?​200|}} {{:​spezial:​example-1.png?​200|}}
-{{:​spezial:​example-2.png?​200|}} 
 {{:​spezial:​example-3.png?​200|}} {{:​spezial:​example-3.png?​200|}}
 +{{:​spezial:​example-2.png?​200|}}
 <​html>​ <​html>​
 </​span>​ </​span>​
Zeile 15: Zeile 15:
 gnuplot ist ein sehr altes Programm -- es wird seit 1986 entwickelt und ist damit annähernd so alt wie TeX selbst. gnuplot verfolgt auch ein ähnliches Konzept: man schreibt eine Eingabedatei in reinem Text (//plain text//), "​kompiliert"​ diese mit dem Programm ''​gnuplot''​ und erhält den Graphen als Ausgabedatei. gnuplot kann viele verschiedene Dateitypen (Grafikformate) als Ausgabe erzeugen -- und unter anderem arbeitet es auch gut mit LaTeX zusammen wenn man es richtig verwendet. ​ gnuplot ist ein sehr altes Programm -- es wird seit 1986 entwickelt und ist damit annähernd so alt wie TeX selbst. gnuplot verfolgt auch ein ähnliches Konzept: man schreibt eine Eingabedatei in reinem Text (//plain text//), "​kompiliert"​ diese mit dem Programm ''​gnuplot''​ und erhält den Graphen als Ausgabedatei. gnuplot kann viele verschiedene Dateitypen (Grafikformate) als Ausgabe erzeugen -- und unter anderem arbeitet es auch gut mit LaTeX zusammen wenn man es richtig verwendet. ​
  
-//​Randnotiz: ​Es gibt auch einen interaktiven Modus und verschiedene grafische Oberflächen für gnuplot. Im Sinne einer leichten Reproduzierbarkeit einer Grafik empfehlen wir jedoch trotzdem die direkte Verwendung eines Eingabescripts und des Befehls ''​gnuplot''/​/+<​note>​Es gibt auch einen interaktiven Modus und verschiedene grafische Oberflächen für gnuplot. Im Sinne einer leichten Reproduzierbarkeit einer Grafik empfehlen wir jedoch trotzdem die direkte Verwendung eines Eingabescripts und des Befehls ''​gnuplot''​.</note>
  
-//Randnotiz 2: Trotz seines Alters ist gnuplot keineswegs VERaltet, sondern wird immer noch verwendet um hochpräzise und flexible Graphen, insbesondere für wissenschaftliche Arbeiten, zu erzeugen. Auch die Zeichenbibliothek TikZ unterstützt die Verwendung von gnuplot//+<​note>​Trotz seines Alters ist gnuplot keineswegs VERaltet, sondern wird immer noch verwendet um hochpräzise und flexible Graphen, insbesondere für wissenschaftliche Arbeiten, zu erzeugen. Auch die Zeichenbibliothek TikZ unterstützt die Verwendung von gnuplot.</note>
  
  
-**gnuplot ist ein sehr umfangreiches Programm, weshalb wir in diesem Tutorial unmöglich auf alle Features eingehen können. Für alles weitergehende müssen wir auf die {{:​spezial:​gnuplot-4.6.pdf|offizielle gnuplot Dokumentation (PDF, ca. 240 Seiten, englisch)}} verweisen, die leider nur auf Englisch verfügbar ist. **+<note important>​gnuplot ist ein sehr umfangreiches Programm, weshalb wir in diesem Tutorial unmöglich auf alle Features eingehen können. Für alles weitergehende müssen wir auf die {{:​spezial:​gnuplot-4.6.pdf|offizielle gnuplot Dokumentation (PDF, ca. 240 Seiten, englisch)}} verweisen, die leider nur auf Englisch verfügbar ist.</​note>​
  
 ===== Installation ===== ===== Installation =====
 +==== Windows ====
  
-FIXME+Das Installationsprogramm für Windows kann von der [[http://​www.gnuplot.info/​download.html|gnuplot Download Seite]] bzw. der dort verlinkten [[http://​sourceforge.net/​projects/​gnuplot/​files/​|Sourceforge Seite]] heruntergeladen werden. ​
  
-===== Der erste Graph =====+{{ :​spezial:​screenshot-gnuplot-setup-windows-2.png?​direct&​200|}} Damit das Programm später auch von der Kommandozeile leichter verfügbar ist, sollten Sie während der Installation den Punkt "​Andwendungsverzeichnis dem Suchpfad PATH hinzufügen"​ aktivieren (siehe Screenshot rechts) 
 + 
 +Nach der Installation können Sie das Programm entweder aus dem Startmenü oder über die Eingabeaufforderung mittels ''​gnuplot''​ starten. Im ersten Fall erhalten Sie eine grafische Oberfläche,​ in dem viele der hier beschriebenen Befehle auch über ein Menü verfügbar sind.  
 + 
 +{{ :​spezial:​screenshot-gnuplot-windows-1.png?​direct&​600 |}} 
 + 
 +Man kann jedoch bei Verwendung dieser Oberfläche leicht den Überblick verlieren, welche Einstellungen gerade aktiv sind. Wir raten deshalb zur Verwendung eines [[http://​de.wikipedia.org/​wiki/​Liste_von_Texteditoren|Text-Editors]] (außer den klassischen Editoren vim und emacs unterstützt z.B. noch [[http://​www.jedit.org/​|jEdit]] die Syntaxhervorhebung von gnuplot-Dateien).  
 + 
 +==== Mac OS X ==== 
 + 
 +Unter Mac OS X installieren Sie gnuplot am besten über eine der bekannten Paketdistributionen wie [[http://​www.macports.org/​|MacPorts]],​ [[http://​www.finkproject.org/​|Fink]] oder [[http://​brew.sh/​|Homebrew]],​ wobei wir nur mit ersterem Erfahrungen haben.  
 + 
 +Unter MacPorts sollte ein einfaches  
 +<​code>​ 
 +sudo port install gnuplot 
 +</​code>​ 
 +ausreichen.  
 + 
 +==== Linux ==== 
 + 
 +Unter Linux nutzen Sie einfach den Paketinstallations-Mechanismus Ihrer Distribution. Unter Debian/​Ubuntu und verwandten Systemen sollte das Paket ''​gnuplot''​ verfügbar sein, das z.B. mit Hilfe des Befehls 
 + 
 +<​code>​ 
 +sudo apt-get install gnuplot 
 +</​code>​ 
 +installiert werden kann.  
 + 
 +===== Tutorial ===== 
 + 
 +==== Der erste Graph ====
  
 Wir starten mit einem sehr einfachen Graphen: wir wollen die Funktion sin(x) im Bereich von 2 bis 2π darstellen und als PDF-Datei ausgeben. ​ Wir starten mit einem sehr einfachen Graphen: wir wollen die Funktion sin(x) im Bereich von 2 bis 2π darstellen und als PDF-Datei ausgeben. ​
Zeile 59: Zeile 89:
     * Der Ausgabedateiname (output) wird auf ''​beispiel1.pdf''​ gesetzt ​     * Der Ausgabedateiname (output) wird auf ''​beispiel1.pdf''​ gesetzt ​
     * Die Bereiche für die x-Achse und y-Achse werden auf 0 bis 2π und -1 bis 1 gesetzt     * Die Bereiche für die x-Achse und y-Achse werden auf 0 bis 2π und -1 bis 1 gesetzt
 +
 +==== Achsen-Formatierungen ====
 +
 +Bei Graphen von Winkelfunktionen zeichnet man die Achsen üblicherweise durch die Nulldurchgänge und markiert auf der x-Achse Vielfache von π. Dies können wir mit den folgenden Einstellungen erreichen:
 +
 +<code gnuplot>
 +set border 0
 +set xzeroaxis ​
 +set yzeroaxis ​
 +
 +set xtics axis -pi, pi/2, 2*pi
 +set ytics axis -1, 0.5, 1
 +
 +set format x "%.1P pi"
 +</​code>​
 +
 +Die Befehle im Einzelnen:
 +  ** ''​border''​ steuert die äußeren Rahmenlinien des Graphen, wobei man alle vier Linien einzeln steuern kann, indem man die folgenden Werte für die gewünschten Linien aufsummiert und als Argument angibt:
 +    * 1 = untere Rahmenlinie
 +    * 2 = linke Rahmenlinie
 +    * 4 = obere Rahmenlinie
 +    * 8 = rechte Rahmenlinie
 +  .. d.h. 3 wäre beispielsweise die notwendige Angabe für Rahmenlinien links und unten. In unserem Fall geben wir 0 an, weil wir die Achsen später in den Nulldurchgang legen wollen. ​
 +  * ''​set xzeroaxis''​ und ''​set yzeroaxis''​ erledigen genau dies
 +  * Die Achsenmarkierungen legen wir mittels ''​xtics axis''​ und ''​ytics axis''​ ebenfalls auf die neuen Achsen. Weiters geben wir den Bereich sowie die Häufigkeit der Markierungen als ''<​Beginn>,<​Schrittweite>,<​Ende>''​ an. 
 +  * Die Beschriftungen auf der x-Achse können wir außerdem mittels ''​set format x''​ formatieren. Der String "%.1P pi" gibt an, dass die Zahl in Vielfachen von π mit einer Nachkommastelle und danach die Zeichen "​pi"​ ausgegeben werden soll. 
 +
 +Damit sieht unser Graph folgendermaßen aus: (Sie können hier die {{:​spezial:​beispiel2.gnu|gesamte gnuplot-Datei downloaden}})
 +
 +{{ :​spezial:​beispiel2.png }}
 +
 +==== Mehrere Funktionen zeichnen und formatieren ====
 +
 +Natürlich können wir in gnuplot auch mehrere Funktionen (für Datenpunkte siehe unten) in ein Diagramm zeichnen. Außerdem stehen verschiedenste Formatierungsbefehle zur Verfügung um die Linien/​Datenpunkte zu beeinflussen. ​
 +
 +Wir wollen nun zwei etwas komplizierte Winkelfunktionen zeichnen:
 +
 +<code gnuplot>
 +plot 0.9*sin(x+0.5) title "​Spannung"​ with linespoints linetype 1 linewidth 4 linecolor rgb "​blue"​ pointtype 4 pointsize 1.5 pointinterval 19, \
 +     ​0.7*cos(x) title "​Strom"​ with linespoints linetype 1 linewidth 3 linecolor rgb "#​ff0000"​ pointtype 6 pointsize 1.5 pointinterval 19
 +</​code>​
 +
 +Dieser Plot-Befehl ist nun schon etwas komplizierter. Zerlegen wir ihn Schritt für Schritt:
 +
 +  ** ''​0.9*sin(x+5)''​ ist die erste Funktion die wir zeichnen wollen. gnuplot kennt sehr viele mathematische Funktionen und Operatoren, die an jene von C/​Fortran/​BASIC/​Pascal angelehnt sind. Im einfachen Fall (explizite Darstellung einer zweidimensionalen Funktion ist immer x die unabhängige Variable. Die vollständige Liste der Operatoren und Funktionen finden Sie auf {{:​spezial:​gnuplot-4.6.pdf#​page=25|Seite 25 der Dokumentation.}} ​
 +  ** Nach der Funktion geben wir mitels ''​title "<​Titel>"''​ den Titel dieser Funktion für die Legende an
 +  ** Nach ''​with''​ beginnen die Angaben für die Formatierung. Wieder gibt es {{:​spezial:​gnuplot-4.6.pdf#​page=89|viele verschiedene Zeichenstile}}. Die wichtigsten sind:
 +    * ''​lines'':​ eine Linie (durchgezogen oder strichliert/​punktiert,​ je nach Linienstil) wird gezeichnet
 +    * ''​points'':​ nur Markierungspunkte werden gezeichnet
 +    * ''​linespoints'':​ beides (Linie und Punkte) werden gezeichnet
 +  .. Die weiteren Angaben bedeuten:
 +    * ''​linetype 1'':​ Linienstil Nr. 1 (durchgezogene Linie)
 +    * ''​linewidth 4'':​ Liniendicke 4
 +    * ''​linecolor rgb "​blue"'':​ Linienfarbe blau
 +    * ''​pointtype 4'':​ Markierungspunkt Nr. 4 (offenes Quadrat)
 +    * ''​pointsize 1.5'':​ Markierungspunkte werden um den Faktor 1.5 vergrößert
 +    * ''​pointinterval 19'':​ Jeden 19. Punkt markieren
 +  ** Danach sehen wir ein Komma ('',''​) -- damit können wir eine zweite (oder auch mehrere) Funktionen in ein Diagramm zeichnen. Da die Befehle relativ lang sind, können wir sie umbrechen, indem wir als letztes Zeichen in einer Zeile einen Backslash (''​\''​) notieren und den Befehl in der nächsten Zeile fortsetzen. ​
 +<note warning>​Beim Umbrechen eines Befehls mittels ''​\''​ darf danach **kein** anderes Zeichen in der selben Zeile eingetippt werden (auch kein Leerzeichen!). Weiters dürfen keine Leerzeilen oder auskommentierte Zeilen (''#​ ...''​) vor der nächsten relevanten Zeile stehen. </​note>​
 +  ** Die zweite Funktion ''​0.7*cos(x)''​ ist ähnlich aufgebaut, es wird nur eine andere Farbe bzw. Markierungspunkt verwendet. ​
 +
 +<note important>​
 +Eine (vermutlich historische) Eigenheit von gnuplot ist die Tatsache, dass das Ergebnis komplett vom verwendeten Terminal (''​set terminal xy''​) abhängt. Sämtliche Linienstile,​ Farben, Dicken können bei der Verwendung von verschiedenen Terminals komplett unterschiedlich aussehen. ​
 +</​note>​
 +
 +Eine Übersicht über die Fähigkeiten und vordefinierten Stile eines Terminals kann man sich mit Hilfe des ''​test''​ Befehls verschaffen. Zur Demonstration hier der entsprechende Output für das hier verwendete ''​pdf''​ Terminal, sowie als (zugegebenermaßen extrem konträres) Beispiel jenes des ''​dumb''​ Terminals:
 +
 +
 +<​html>​
 +<span class="​vorschaublock">​
 +</​html>​
 +{{:​spezial:​test.png?​300|}}
 +{{:​spezial:​screenshot-dumb-test.png?​300|}}
 +<​html>​
 +</​span>​
 +</​html>​
 +
 +Und hier nochmals das Ergebnis unseres gnuplot scripts und {{:​spezial:​beispiel3.gnu|die gesamte Datei zum Herunterladen}}:​
 +
 +{{ :​spezial:​beispiel3.png }}
 +
 +==== Abkürzungen und Benutzerdefinierte Stile ====
 +
 +Man sieht bereits, dass der Plot-Befehl durch die Formatierungsangaben sehr lang werden kann. Es gibt dafür zwei Abhilfen:
 +
 +  -- Sehr viele gnuplot-Befehle können abgekürzt werden. Das heißt, man kann beispielsweise statt ''​linetype''​ einfach ''​lt''​ schreiben, statt ''​pointsize''​ nur ''​ps''​ usw. 
 +  -- Man kann die verschiedenen Angaben zu Liniendicke/​-farbe/​-stil und Punkttyp/​-größe/​-abstand zu einem ''​linestyle''​ (''​ls''​) mittels ''​set style line X''​ zu einem Stil mit der Nummer X zusammenfassen,​ der dann an verschiedenen Stellen des gnuplot scripts verwendet werden kann. 
 +
 +Damit wird unser Dokument wesentlich übersichtlicher:​
 +
 +<code gnuplot>
 +set style line 1 lt 1 lw 4   lc rgb "​blue" ​   pt 4 ps 1.5 pi 19
 +set style line 2 lt 1 lw 3   lc rgb "#​ff0000"​ pt 6 ps 1.5 pi 19
 +
 +plot 0.9*sin(x+0.5) t "​Spannung"​ w lp ls 1, \
 +     ​0.7*cos(x) ​    t "​Strom" ​   w lp ls 2
 +</​code>​
 +
 +({{:​spezial:​beispiel4.gnu|Gesamtdokument zum Herunterladen}},​ das Ergebnis sieht genau gleich aus). 
 +
 +==== Gitternetzlinien und Sonderzeichen ====
 +
 +Zu guter Letzt wollen wir noch Gitternetzlinien einblenden und außerdem das Wort "​pi"​ in unseren Achsenbeschriftungen durch ein echtes π ersetzen. ​
 +
 +Dazu müssen wir noch einige Optionen für das Terminal setzen:
 +
 +<code gnuplot>
 +set terminal pdf enhanced fsize 8 dashed dl 0.5
 +</​code>​
 +
 +Die Option ''​enhanced''​ ermöglicht uns die Verwendung von einigen erweiterten Schriftformatierungen wie z.B. Super- und Subskripten in ''​x^2''​ oder ''​x_t''​ in LaTeX-Syntax. Außerdem ermöglicht es das Umschalten von Schriftart und Schriftgröße mit Hilfe der Syntax ''​{/​Schriftname=Schriftgroesse Text}''​ (z.B. ''​{/​Helvetica=20 G}''​ für ein G in 20pt Helvetica). ​
 +
 +Mit der Angabe ''​fsize 8''​ vergrößern wir Schriften im Diagramm auf eine Grundgröße von 8pt. 
 +
 +''​dashed dl 0.5''​ ermöglicht uns die Verwendung von strichlierten/​punktierten "​Linetypes"​ und skaliert die Länge der Striche mit dem Faktor 0.5.
 +
 +Damit können wir nun einen Linestyle für die Gitternetzlinien erstellen sowie diese aktivieren. Mit Hilfe der "​Symbol"​ Schriftart können wir außerdem das π einfügen:
 +
 +<code gnuplot>
 +set style line 3 lt 2 lw 0.1 lc rgb "#​888888"​
 +set style line 4 lt 1 lw 4   lc rgb "#​000000"​
 +
 +set grid xtics ytics mytics ls 3
 +
 +set xzeroaxis ls 4
 +set yzeroaxis ls 4
 +
 +set mytics 5
 +
 +set format x "%.1P {/Symbol p}"
 +</​code>​
 +
 +Die Befehle im Detail:
 +
 +  ** Linestyle 3 ist als strichlierte Linie (linetype 1) der Dicke 0.1 und grauer Farbe definiert. Mit Linestyle 4 wollen wir die Achsen etwas dicker zeichen (linewidth 4). 
 +  **  Mittels ''​set grid''​ aktivieren wir die Gitternetzlinien an den Hauptunterteilungen der x- und y-Achse (''​xtics''​ und ''​ytics''​) sowie auf den Nebenunterteilungen der y-Achse (''​mytics''​ = minor ytics) mit Linestyle 3. 
 +  **  Über ''​set xzeroaxis ls 4''​ und dem zugehörigen Befehl für die y-Achse verwenden wir Linestyle 4 für die Achsenlinien. ​
 +  ** ''​set mytics 5''​ gibt an, dass es auf der y-Achse 5 Nebenunterteilungen pro Hauptunterteilung gibt. 
 +  ** ''​{/​Symbol p}''​ fügt das π-Symbol mit Hilfe der "​Symbol"​-Schriftart ein. 
 +
 +Damit sind wir am Ende unseres gnuplot-Grundlagen-Tutorials. Hier das Endergebnis und {{:​spezial:​beispiel_fertig.gnu|das endgültige gnuplot script}}:
 +
 +
 +{{ :​spezial:​beispiel_fertig.png }}
 +
 +===== LaTeX-Integration =====
 +
 +<note important>​
 +Hier ist zur Zeit eine Baustelle!
 +</​note>​
 +
 +===== Tipps & Tricks =====
 +
 +<note important>​
 +Hier ist zur Zeit eine Baustelle!
 +</​note>​
spezial/gnuplot.1362685888.txt.gz · Zuletzt geändert: 07.03.2013 20:51 von tquaritsch