1:1 Diagramme in LaTeX und Gnuplot

Nachdem mich schon einige Leute gefragt haben wie man in LaTeX Diagramme erstellen kann, die auf dem Papier einen definierten Maßstab haben (z.B. 1cm entspricht 1V auf der Achse) und ich mir die Commands für ein Usenet-Posting gerade zusammengesucht habe, möchte ich diesen Tipp auch hier preisgeben:

Dazu ein Beispiel für ein Gnuplot-File (sample.gpl)

CODE:
  1. set terminal epslatex
  2. set output 'sample.eps'
  3. set bmargin 0
  4. set tmargin 0
  5. set rmargin 0
  6. set lmargin 0
  7. set size 8/(5*2.54), 4/(3*2.54)
  8. #  size: ^^ x in cm  ^^ y in cm (plot area only)
  9. set xrange [ -2 : 2 ]
  10. set yrange [ -1 : 1 ]
  11. set grid xtics ytics
  12. set key off
  13. set title "$y=\\sin(\\pi x)$"
  14. plot sin(pi*x) with lines lw 2


Daraus erzeugt man mittels gnuplot sample.gpl den Output (hier die beiden Files sample.eps und sample.tex) und kann die dann beispielsweise so in LaTeX einbinden:

LATEX:
  1. \documentclass{article}
  2. \usepackage{graphicx}
  3. \begin{document}
  4. \section{Test}
  5. 1:1 Grafik mit Gnuplot:
  6. \begin{figure}[htb]
  7. \centering
  8. \vspace{5mm}\input{sample}\vspace{5mm}
  9. \caption{Testgrafik}
  10. \end{figure}
  11. \end{document}


Heraus kommt das: (klicken für PDF-File)

Gnuplot Diagramm in LaTeX

Und wenn man das ausdruckt sollte das Diagramm genau 8 mal 4 cm groß sein (Achtung: Seitenanpassung im Adobe Reader ausschalten!)

Zur Erklärung:

  • Das ganze funktioniert nur mit dem Gnuplot Terminal epslatex.
  • Die Idee dahinter ist, dass die Größe des Diagramms standardmäßig 3 mal 5 Zoll ist, allerdings gibt es einen Rand mit dynamischer Größe in dem die Achsenbeschriftungen, Diagrammtitel usw. platziert werden. Nun wird dieser Rand auf 0 gesetzt (set ?margin 0) und das Diagramm mittels set size und dem Zoll/cm-Umrechnungsfaktor auf die gewünschte Größe skaliert. Wenn man nun auf den Achsen einen sinnvollen Minimal- und Maximalwert wählt (oben z.B. -4 bis 4 bei einer Länge von 8cm der x-Achse) erhält man auch einen sinnvollen Maßstab.
  • Das Entfernen des Rands ist bei dem epslatex Terminal jedoch egal, weil sämtliche Texte in einer LaTeX Picture umgebung gesetzt werden.
  • Man fügt das von Gnuplot erzeugte .tex-File einfach mittels \input{sample} in das LaTeX-Dokument ein. Das einzige was nicht ganz stimmt ist die "Bounding-Box" des Diagramms, weil ja der Rand auf 0 gesetzt wurde und die Beschriftungen trotzdem gesetzt werden. Deshalb muss man (meistens vor und nach dem Diagramm) zusätzliche Abstände einfügen.
  • Manchmal ist bei mir das Diagramm in x-Richtung 1-2 mm kleiner als die angegebene Größe, woran das liegt weiß ich nicht. Man kann es jedoch zur Not einfach im size-Befehl korrigieren.
  • Wenn man das eps-File während der Gestaltung des Diagramms z.B. mit ghostview betrachtet, sieht man natürlich keine Texte. Dazu muss man das LaTeX-Dokument durchkompilieren.
  • Wie man sieht kann man in diesem Terminal auch LaTeX-Commands und dadurch math-Umgebungen verwenden, was für die Beschriftungen ganz nützlich ist.

Einen Kommentar schreiben