Vor einiger Zeit hatte ich im Beitrag Schicke Grafiken aus Matlab in LaTeX Möglichkeiten ausgelotet aus mit Matlab erzeugten Daten schicke Plots in LaTeX zu generieren. Sehr vielversprechend war dort das Paket pgfplots bei dem sich in den letzten Monaten einiges getan hat. Es liegt mittlerweile in Version 1.1 vor und hat neben dem Einbinden externer Datenquellen noch so manches dazugelernt. Ich möchte in diesem und einem folgenden Artikel an zwei Beispielen zeigen, wie man mit pgfplots tolle Ergebnisse produzieren kann.
Zunächst bleiben wir bei Matlab. Aus Matlab heraus ist es vergleichsweise einfach das .table-Format zu erzeugen, aus dem pgfplots Werte einlesen kann. Im einfachsten Fall benutzt man die Funktion dlmwrite. Will man auch noch Header und Kommentarzeilen in das Zwischenformat packen, muss man bisschen mehr Aufwand betreiben, ein entsprechendes Skript ist aber in kurzer Zeit fertiggestellt und bleibt dem geneigten Leser als Hausaufgabe überlassen. ;-) Meine Datei dahl_2008-08-19_05.table beginnt jedenfalls wie folgt:
time datadownsampled datadecimated dataresampled impactdownsampled impactdecimated impactresampled
7.2 0.0042314 0.0031181 0.0017701 7.6889e-005 7.5995e-005 4.3056e-005
7.201 0.010326 0.0048359 0.0049109 8.081e-005 8.0715e-005 8.7923e-005
7.202 0.013369 -0.0069568 -0.006471 7.9993e-005 8.087e-005 7.8394e-005
7.203 -0.011055 -0.010981 -0.011697 6.9248e-005 7.0035e-005 7.2734e-005
Es folgen knapp fünfhundert weitere Zeilen. Wie man bereits am Header sieht ist es empfehlenswert ein Downsampling der zu plottenden Daten vorzusehen, wenn eine Datenreihe mehr als ein paar hundert Elemente enthält. Diese spezielle Datei enthält in der ersten Spalte die Zeit, in den Spalten zwei bis vier ein Signal und in den Spalten fünf bis sieben ein zweites Signal. Für beide Signale wurden je drei verschiedene Downsampling-Verfahren ausgetestet, das jedoch nur nebenbei und zur Erläuterung, für den Plot werde ich nur die Spalten time und datadownsampled nutzen.
In LaTeX-Dokument sollten die notwendigen Pakete geladen sein, in diesem Fall sieht das bei mir so aus:
\usepackage{tikz} \usepackage{pgfplots} \pgfplotsset{every axis plot/.append style={very thick}}
Die Einbindung selbst erfolgt wie gewohnt in einer float-Umgebung, die das ganze zentriert und auch noch label und Bildunterschrift bereit stellt. Statt \includegraphics fügt man aber einfach eine tikzpicture-Umgebung ein:
\begin{figure}[htb] \centering \begin{tikzpicture} \begin{axis}[ xlabel=Zeit (s), ylabel=Kraft (N), width=12cm, height=8cm] \addplot[smooth,color=blue] table[x=time,y=datadownsampled] {plots/dahl_2008-08-19_05.table}; \end{axis} \end{tikzpicture} \caption{Rohdaten Messung \texttt{dahl\_2008-08-19\_05}} \label{fig:rohdaten_dahl_2008-08-19_05.txt} \end{figure}
Wichtig für das Lesen aus der externen .table-Datei ist die Anweisung table in der Zeile beginnend mit \addplot. Das Ergebnis ist eine Vektorgrafik. Die Achsen sind wunderbar mit der im restlichen LaTeX-Dokument verwendeten Schrift beschriftet und zwar immer in der richtigen Größe. Mit extern als .eps oder ähnlichen Formaten eingebundenen Grafiken ist so etwas kaum möglich. Das Ergebnis spricht für sich:
4 Kommentare
Schicke Grafiken in LaTeX mit pgfplots (2) von antiblau blog
17. September 2008, 22:52 Uhr 1[...] hatte im Beitrag »Schicke Grafiken in LaTeX mit pgfplots (1)« noch ein zweites Beispiel angekündigt. Diesmal zeige ich wie man mit pgfplots eine Grafik [...]
pgffan
7. November 2008, 13:09 Uhr 2Sehr gutes Beispiel und ein tolles Ergebnis! Ist es möglich, aus einer großen Datei mit vielen Zeilen direkt anzugeben, dass z.B. nur jeder 4te Zeitwert eingelesen werden soll, da eh nicht höher aufgelöst werden kann? Bei PSTricks geht es und es wäre ja auch sinnvoll, um große Dateien nicht einzeln vorverarbeiten zu müssen.
LeSpocky
7. November 2008, 14:21 Uhr 3Scheint derzeit nicht möglich zu sein. Ich hab das mal als Feature Request bei Sourceforge eingetragen. 8-)
antiblau blog
21. April 2009, 22:39 Uhr 4Speicherlimits von MiKTeX erhöhen…
Vor einiger Zeit hatte ich im Beitrag Schicke Grafiken in LaTeX mit pgfplots (1) eine elegante Möglichkeit vorgestellt, größere externe Datenmengen in schicke LaTeX-Plots zu verwandeln. Ich mache das immer noch sehr ähnlich, bin abe…
Hinterlasse einen Kommentar:
Suchen
Kategorien
Allgemein AntiVir Apache CLI DataMining Debian eBay Eclipse Eisfair GnuPG GTD Hardware HCI HowTo ICQ Ideen IMPULS Internet IRC Jabber KDE Kommunikation LaTeX Linux Literatur Lustiges Magdeburg MATLAB Mobiltelefon MSRS OpenSource Perl PIM Politik Programmierung RFID Shirt Sicherheit Software Umwelt Versionsverwaltung Video Virtualisierung WebUni Wikipedia Windows WordPress Zaurus
Letzte Beiträge
Letzte Kommentare
Autoren
Meta
Blogroll
Archiv