Diagramme mit LaTeX Wiki .:. goLaTeX - Mein LaTeX-Forum


goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum

goLaTeX.de - Wiki
 


Diagramme mit LaTeX

Um Diagramme mit LaTeX zu erzeugen gibt es verschiedene Möglichkeiten. Ich stelle hier das Paket pgfplots vor. Es basiert auf TikZ und ermöglicht somit die direkte Ausgabe als PDF.

Inhaltsverzeichnis

[bearbeiten] Daten

Die Daten für pgfplots müssen als Textdatei vorliegen. Dabei ist zu beachten:

  • Zeilen, die mit # oder % beginnen, werden ignoriert
  • Die erste Zeile, die kein # oder % enthält, sollte Überschriften enthalten
    • Die Überschriften sollten nur aus einem Wort bestehen
    • und keine Umlaute oder Sonderzeichen enthalten
  • Die Spalten sollten durch Tabulatorzeichen getrennt sein
  • Ausser der ersten sollte keine Zeile Text enthalten, sondern nur Zahlen
  • Dezimaltrennzeichen sollte ein Punkt sein statt eines Kommas

Erzeugen kann man solche Datendateien mit Excel oder OpenOffice Calc. Man muss da ein wenig mit den Exporteinstellung herumprobieren, aber wenn man es raus hat, geht es sehr gut. Wichtig ist, dass Text nicht mit Anführungszeichen umschlossen wird und der Punkt als Dezimaltrenner. Alles andere kann man auch pgfplots beibringen.

[bearbeiten] Beispiel 1

Zunächst eine kleine Datendatei (data1.csv):

Messung	Menge
1	15
2	14
3	16
4	14
5	13
6	13
7	14
8	15
9	16
10	15
Codebeispiel Ausgabe des Dokumentes
\documentclass[paper=a4,12pt,version=last,landscape]{scrartcl}
 
\usepackage{pgfplots}
 
\begin{document}
\centering
	\begin{tikzpicture}
		\begin{axis}[ymin=0]
			\addplot table {data1.csv};
		\end{axis}
	\end{tikzpicture}
\end{document}

Ausgabe

Dieses sehr einfache Beispiel zeigt die grundlegende Verwendung von pgfplots. Jedes Diagramm wird in einer tikzpicture Umgebung erzeugt.
Als nächstes wird mit der axis Umgebung ein Koordinatensystem erzeugt. Die axis Umgebung kann man mit Hilfe von optionalen Parametern formatieren. In diesem Beispiel wird mit [ymin=0] die y-Achse so formatiert, dass sie bei Null beginnt. In der Standardeinstellung werden beide Achsen so formatiert, dass die gezeichneten Daten gleichmäßig verteilt sind.
Schließlich werden mit \addplot table {data1.csv}; die Daten aus der Datei gelesen und dargestellt.

[bearbeiten] Beispiel 2

Nun eine etwas umfangreichere Datendatei (data2.csv):

Jahr  Januar  Februar  März  April  Mai  Juni  Juli  August  	September  Oktober  November  Dezember  Summe
1946 	40.8 	121.0 	16.2 	29.8 	78.2 	136.7 	49.8 	66.8 	32.0 	59.1 	35.6 	19.9 	685.9
1947 	33.1 	47.3 	102.0 	40.0 	53.7 	38.7 	56.9 	16.9 	39.2 	24.9 	105.0 	153.0 	710.7
1948 	130.0 	38.4 	19.0 	38.7 	43.9 	106.4 	77.5 	99.7 	25.6 	34.8 	39.2 	30.8 	684.0
1949 	37.0 	16.0 	29.0 	56.0 	92.0 	21.3 	8.0 	55.6 	25.5 	44.0 	45.6 	55.4 	485.4
1950 	26.7 	96.9 	9.3 	83.1 	80.7 	84.9 	120.5 	149.3 	79.5 	23.5 	129.7 	47.3 	931.4
1951 	76.0 	50.7 	60.1 	49.1 	57.3 	168.2 	41.9 	80.4 	47.2 	45.2 	109.5 	45.9 	831.5
1952 	55.4 	63.9 	135.0 	35.6 	21.6 	73.1 	6.1 	61.3 	89.0 	109.0 	143.0 	85.6 	878.6
1953 	26.4 	52.3 	5.0 	33.6 	58.2 	112.1 	130.1 	25.4 	33.3 	25.2 	8.2 	21.2 	531.0
1954 	52.4 	35.0 	21.0 	66.7 	63.7 	53.0 	67.7 	108.0 	108.1 	49.8 	39.9 	61.9 	727.2
1955 	122.0 	56.0 	25.4 	27.8 	87.0 	100.7 	87.8 	45.3 	42.6 	31.3 	10.3 	108.8 	745.0
1956 	55.8 	16.9 	25.2 	89.7 	64.7 	45.8 	92.5 	79.3 	38.0 	103.0 	44.9 	20.8 	676.6
1957 	34.0 	101.1 	40.9 	32.0 	45.1 	174.5 	76.2 	117.4 	115.8 	14.3 	19.4 	49.8 	820.5
1958 	79.0 	148.4 	31.7 	34.6 	86.3 	73.3 	69.2 	110.9 	45.9 	53.0 	45.4 	95.6 	873.3
1959 	65.0 	0.5 	33.5 	69.6 	11.9 	46.1 	34.1 	61.2 	13.8 	52.9 	22.9 	44.6 	456.1
1960 	53.2 	64.3 	25.5 	23.0 	79.3 	45.2 	99.2 	106.8 	18.9 	89.9 	88.5 	70.6 	764.4
1961 	86.6 	53.0 	13.3 	89.8 	103.0 	86.8 	91.5 	81.7 	18.2 	43.4 	50.5 	78.0 	795.8
1962 	69.0 	64.0 	71.0 	43.0 	68.0 	28.9 	48.5 	42.6 	51.5 	12.6 	25.7 	53.9 	578.7
1963 	16.4 	32.5 	67.0 	33.2 	26.8 	85.0 	14.8 	124.0 	20.7 	47.8 	106.0 	2.1 	576.3
1964 	12.2 	40.4 	89.5 	37.6 	34.4 	37.8 	3.9 	57.7 	61.2 	45.8 	62.3 	23.7 	506.5
1965 	107.0 	26.5 	82.5 	80.6 	98.3 	126.2 	114.9 	44.1 	77.5 	7.8 	129.0 	128.0 	1022.4
1966 	45.0 	48.0 	50.0 	56.0 	49.0 	119.6 	58.4 	123.0 	35.7 	54.8 	50.1 	116.2 	805.8
1967 	32.5 	34.8 	64.1 	27.8 	76.8 	55.0 	60.3 	60.7 	99.7 	75.0 	59.3 	72.6 	718.6
1968 	80.5 	69.7 	44.2 	136.0 	71.7 	106.9 	105.2 	191.3 	84.7 	43.1 	25.0 	42.2 	1000.5
1969 	41.0 	84.7 	71.8 	87.3 	91.9 	109.7 	50.7 	106.2 	21.4 	4.1 	89.5 	31.7 	790.0
1970 	63.9 	144.8 	46.7 	89.2 	160.0 	62.1 	73.0 	40.5 	54.4 	39.6 	44.4 	36.6 	855.2
1971 	33.0 	17.0 	29.7 	19.5 	68.0 	90.5 	11.3 	49.2 	21.4 	23.2 	86.9 	12.4 	462.1
1972 	25.4 	7.9 	35.5 	70.0 	96.5 	92.2 	47.6 	80.2 	31.1 	28.8 	125.8 	19.2 	660.2
1973 	19.9 	54.2 	17.3 	62.0 	93.8 	94.9 	101.5 	71.3 	23.1 	73.7 	93.6 	50.6 	755.9
1974 	40.5 	61.5 	66.3 	20.5 	50.3 	63.6 	98.4 	42.8 	33.2 	141.0 	64.6 	78.7 	761.4
1975 	56.0 	26.6 	53.4 	40.0 	53.8 	160.1 	115.5 	98.0 	96.2 	23.9 	69.8 	27.0 	820.3
1976 	71.8 	21.7 	26.1 	61.2 	38.5 	17.9 	87.7 	32.3 	123.1 	48.0 	56.9 	63.1 	648.3
1977 	79.9 	111.7 	30.4 	38.1 	25.0 	105.2 	33.1 	56.3 	42.0 	29.3 	97.0 	51.9 	699.9
1978 	45.2 	44.5 	64.2 	31.8 	256.8 	100.4 	124.1 	55.2 	51.6 	42.1 	21.5 	125.1 	962.5
1979 	38.6 	78.9 	90.0 	69.7 	48.4 	38.8 	31.7 	78.4 	25.2 	33.8 	80.0 	82.2 	695.7
1980 	63.7 	44.8 	34.3 	50.6 	63.0 	118.0 	161.0 	63.8 	32.8 	92.6 	39.8 	68.6 	833.0
1981 	74.3 	42.3 	59.9 	71.2 	68.8 	115.7 	64.6 	39.1 	52.0 	220.0 	60.9 	145.7 	1014.5
1982 	84.1 	10.8 	61.8 	27.5 	58.9 	135.7 	109.5 	63.3 	35.4 	135.0 	46.8 	143.6 	912.4
1983 	50.4 	48.7 	49.3 	141.0 	164.7 	31.9 	18.5 	21.3 	56.8 	44.2 	45.3 	39.8 	711.9
1984 	121.1 	75.6 	18.4 	47.5 	131.3 	78.8 	72.2 	23.4 	119.7 	45.0 	59.2 	37.2 	829.4
1985 	58.9 	48.3 	45.6 	48.7 	98.1 	95.2 	74.5 	29.6 	39.0 	11.3 	93.4 	53.2 	695.8
1986 	98.4 	12.7 	66.9 	89.9 	83.3 	56.4 	60.8 	133.6 	97.2 	89.8 	42.2 	71.8 	903.0
1987 	41.9 	48.2 	65.6 	24.0 	123.0 	131.1 	101.1 	58.7 	41.5 	81.5 	62.8 	30.8 	810.2
1988 	91.1 	108.2 	148.0 	33.0 	60.2 	55.7 	81.5 	53.4 	84.7 	80.7 	39.5 	99.2 	935.2
1989 	20.4 	57.1 	34.8 	123.2 	26.0 	47.4 	58.0 	36.5 	15.2 	41.7 	41.7 	130.3 	632.3
1990 	32.6 	106.1 	24.3 	35.6 	7.1 	109.8 	26.6 	38.8 	64.5 	66.1 	93.5 	92.4 	697.4
1991 	59.7 	22.8 	27.0 	23.0 	17.0 	55.0 	66.0 	10.0 	71.0 	33.0 	86.0 	55.0 	525.5
1992 	42.2 	42.2 	103.9 	43.0 	57.4 	123.0 	61.6 	63.7 	33.3 	115.0 	118.8 	31.3 	835.4
1993 	77.4 	17.2 	22.0 	41.0 	89.0 	82.0 	91.0 	33.0 	91.0 	106.6 	30.0 	166.7 	846.9
1994 	62.9 	49.5 	71.0 	91.0 	83.5 	91.6 	32.9 	68.1 	106.2 	33.0 	37.5 	79.0 	806.2
1995 	124.1 	52.7 	84.8 	64.1 	102.0 	65.3 	85.9 	57.6 	99.5 	36.1 	81.9 	56.8 	910.8
1996 	3.5 	60.8 	22.3 	30.3 	118.3 	85.3 	69.5 	51.1 	17.2 	67.4 	115.0 	50.2 	690.9
1997 	20.3 	133.5 	40.2 	25.6 	57.5 	141.7 	103.3 	51.5 	11.6 	64.1 	65.5 	73.6 	788.4
1998 	61.6 	21.6 	34.1 	94.2 	29.0 	71.9 	51.4 	22.9 	74.0 	132.5 	58.9 	24.6 	676.7
1999 	59.6 	55.7 	88.0 	48.5 	73.6 	74.9 	70.0 	37.0 	70.0 	48.7 	49.9 	165.7 	841.6
2000 	27.0 	77.2 	61.7 	48.9 	89.3 	37.5 	112.0 	52.0 	87.8 	43.2 	72.7 	46.5 	755.8
2001 	70.5 	60.0 	134.4 	81.4 	37.4 	80.3 	47.7 	31.5 	97.2 	52.3 	82.3 	98.1 	873.1
2002 	27.7 	128.8 	59.0 	34.6 	142.2 	53.7 	156.0 	47.8 	82.5 	90.0 	100.7 	58.6 	981.6
2003 	101.8 	12.8 	24.1 	27.6 	67.5 	61.4 	64.4 	24.1 	23.6 	93.1 	42.8 	23.1 	566.3
2004 	101.3 	29.5 	22.9 	23.6 	55.8 	50.1 	61.1 	106.9 	38.8 	98.1 	38.9 	34.0 	661.0
2005 	33.1 	51.8 	35.1 	76.2 	65.7 	21.8 	88.3 	73.4 	31.1 	34.5 	29.5 	62.6 	603.1
2006 	25.4 	44.2 	85.4 	33.6 	64.2 	65.2 	131.7 	156.7 	26.8 	136.0 	35.6 	45.8 	850.6
Codebeispiel
\documentclass[paper=a4,12pt,version=last,landscape]{scrartcl}
 
\usepackage{pgfplots}
 
\begin{document}
\centering
	\begin{tikzpicture}
		\begin{axis}[width=0.9\textwidth,height=0.9\textheight,
			title={Niederschlag in den letzten 60 Jahren},
			xtick={1946,1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005},
			x tick label style={/pgf/number format/1000 sep=},
			xlabel={Jahr},
			y tick label style={/pgf/number format/1000 sep=},
			extra y ticks={456.1, 1022.4},
			extra y tick labels={{456,1},{1022,4}},
			extra y tick style={grid=major,
				tick label style={xshift=-1cm}},
			ylabel={mm},
			enlarge x limits=0.01]
 
			\addplot table[x=Jahr, y=Summe] {data2.csv};
		\end{axis}
	\end{tikzpicture}
\end{document}
Ausgabe des Dokumentes

Ausgabe

In diesem umfangreicheren Beispiel werden einige Parameter der axis Umgebung verändert:

width=0.9\textwidth,height=0.9\textheight
Hier wird die Breite und die Höhe des Koordinatensystems angegeben.
Es wird jede LaTeX-Einheit akzeptiert.
title={Niederschlag in den letzten 60 Jahren}
Der Titel des Diagramms wird angegeben. Hier ist praktisch jeder beliebige LaTeX-Code erlaubt.
Dieser Titel darf nicht mit einer eventuell nötigen Bildunterschrift verwechselt werden, die ins Abbildungsverzeichnis aufgenommen werden soll.
xtick={1946,1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005}
Damit nicht jede Jahreszahl dargestellt wird, wird hier eine Liste übergeben, die festlegt, welche x-Werte an die Achse geschrieben werden.
x tick label style={/pgf/number format/1000 sep=}
Normalerweise setzt pgfplots als Tausendertrennzeichen ein Komma wie im englischen Sprachraum üblich. Damit dies bei den Jahreszahlen nicht passiert, wird hier der Style verändert.
xlabel={Jahr}
Das Label an der x-Achse. Hier kann beliebiger LaTeX-Code stehen.
y tick label style={/pgf/number format/1000 sep=}
Auch an der y-Achse werden die Tausendertrennzeichen entfernt.
extra y ticks={456.1, 1022.4}
Um das Minimum und das Maximum zu markieren, werden hier zusätzliche Punkte festgelegt, die an die y-Achse geschrieben werden sollen. Das gleiche ist auch für die x-Achse möglich.
extra y tick labels={{456,1},{1022,4}}
Weil hier Zahlen mit Kommastelle angezeigt werden sollen, werden die Labels der zusätzlichen Punkte explizit angegeben. Hier kann beliebiger LaTeX-Code stehen.
Solche Labels können auch für die normalen ticks der x- und y-Achsen angegeben werden.
extra y tick style={grid=major, tick label style={xshift=-1cm}}
Hier wird das Aussehen der zusätzlichen Punkte festgelegt.
Es wird eine Linie eingefügt, die wie das Hauptgitternetz aussieht und das Label wird um 1cm nach links verschoben, damit es nicht mit den normalen Labels überlappt.
ylabel={mm}
Das Label an der y-Achse. Hier kann beliebiger LaTeX-Code stehen.
enlarge x limits=0.01
Dies bewirkt, dass der Abstand zwischen dem ersten x-Wert und dem linken Rand, sowie dem letzten x-Wert und dem rechten Rand, verkleinert wird. Werte größer als 1 vergrößern den Rand.

Die Daten werden mit \addplot table[x=Jahr, y=Summe] {data2.csv}; aus der Datei gelesen und dargestellt. Im optionalen Parameter von table wird festgelegt, welche Spalte auf welche Achse gezeichnet wird. Hier kann man entweder die Spaltenüberschrift verwenden, oder auch [x index=0, y index=13].

[bearbeiten] Beispiel 3

Es besteht die Möglichkeit mathematische Ausdrücke durch gnuplot berechnen zu lassen und dann mit Hilfe von pgfplots anzuzeigen. Dazu dient der Befehl\addplot gnuplot . Hierbei wird von pdflatex gnuplot aufgerufen und alle notwendigen Befehle ausgeführt. Um auf die Konsole zuzugreifen, muss pdflatex mit der Option -shell-escape aufgerufen werden. Diese Option sollte aber nur gesetzt werden, wenn sie wirklich benötigt wird, da es prinzipiell möglich ist damit Schadcode auf dem System auszuführen.

\addplot gnuplot
Es können beliebige Polynome gezeichnet werden, die zuvor mit gnuplot erzeugt werden.
\addplot gnuplot[raw gnuplot]
Hier müssen komplette gnuplot Befehle angegeben werden, die auch in gnuplot zu einem Ausdruck führen würden. Das geht so weit, dass ganze fit-Befehlsketten angegeben werden können. Dies ist aber sehr ineffizient, da bei jeden Durchlauf der fit-Allgorithums mit aufgerufen wird. Es empfiehlt sich also den Fit mit gnuplot manuell durchzuführen und nur die erzeugte Tabelle (kann in gnuplot durch set table 'ausgebedatei' eingestellt werden) einzubinden.
\addplot plot file {data.dat};
Bindet die angegebene Tabellen-Datei ein und erzeugt daraus eine Kurve.


In diesem Beispiel wurden eine Normalparabel (blau), ein kompletter Fit über die Tabelle "data.dat" (rot) und der Ausdruck der Tabelle, als Datenpunkte, erzeugt.

Codebeispiel Ausgabe des Dokumentes
\documentclass[paper=a4,12pt,version=last,landscape]{scrartcl}
 
\usepackage{pgfplots}
 
\usepackage{filecontents}
\begin{filecontents*}{data.dat}
 1  2 
3 4 
4 6 
5 10
\end{filecontents*}
 
 
\begin{document}
 
\begin{tikzpicture} 
\begin{axis}[xmin=0, xmax=10, ymin=0, ymax=50]
 \addplot gnuplot 
  [id=exp,mark=none,domain=0:8, very thick]{x**2+10}; 
 \addplot gnuplot
   [raw gnuplot,id=bal,mark=none,very thick]{
    set xrange  [0:10];
    f(x)=a*x+b;
    fit f(x) "data.dat" via a,b;
    plot f(x)};
 \addplot plot
  [only marks,mark=x,thick] 
  file {data.dat};
\end{axis} 
\end{tikzpicture} 
 
\end{document}


Ausgabe

[bearbeiten] Die Optionen kurz erklärt

xmin, xmax, ymin, ymax
Gibt die Grenzen des angezeigten Bereichs an.
domain
Gibt den x-Achsenabschnitt an indem die Funktion geplottet wird (entspricht dem gnuplot-Befehl plot[a:b]).
mark
Gibt an wie die Datenpunkte markiert werden sollen.
id
Gibt jedem Plot einen frei wählbaren Namen. Sollte gesetzt werden.

[bearbeiten] Weitere Möglichkeiten

pgfplots bietet noch viele weitere Einstellungsmöglichkeiten.

  • Es können nicht nur lineare sondern auch logrithmische Plots erstellt werden.
  • Neben Liniendiagrammen gibt es noch weitere Darstellungsformen wie Balken- oder Flächendiagramme.
  • Man kann eine Legende hinzufügen.
  • Man kann einzelne Punkte markieren und mit Text beschreiben.
  • Das Aussehen der Linien und der Punkte kann verändert werden.
  • Es können auch Funktionsgraphen erstellt werden.

[bearbeiten] Links




Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2015 goLaTeX.de