2 PGF-Plots mit definierter Breite nebeneinander anordnen Thema ist als GELÖST markiert

Tabellen und Grafiken erstellen und anordnen


Gerd

2 PGF-Plots mit definierter Breite nebeneinander anordnen

Beitrag von Gerd »

Hallo,

ich habe ein Dokument, das mittels geometry jeweils links und rechts einen Rand von 2 Zentimeter bekommt.
Nun möchte ich mehrere Plots mit TikZ und PGF darstellen. Pro Abbildung (figure-Umgebung) sollen zwei Plots nebeneinander stehen.
Damit alle Plots von der Größe gleich sind und alles später einheitlich aussieht, habe ich die Breite der Plots explizit vorgegeben. Jeder Plot soll dabei 8cm breit sein, zwischen den Plots soll ein Abstand von 0.5cm sein und links und rechts vom Rand jeweils ein Abstand von 0.25cm. Dies ergibt zusammen:
0.25cm + 8cm + 0.5cm + 8cm + 0.25cm = 17cm
Hinzu kommt der linke und rechte Seitenrand von jeweils 2cm. Dies ergibt zusammen 21cm, also genau der Breite einer DIN A4 Seite.

Dies habe ich alles so umgesetzt. Wie allerdings das folgende Minimalbeispiel zeigt, kann Latex die Bilder nicht nebeneinander anordnen, sondern sie werden untereinander angeordnet:
\documentclass[12pt,a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
\geometry{a4paper,left=20mm,right=20mm}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usepackage{pgfplots}
\parindent0pt
\begin{document}
\begin{figure}[b]
	\centering
	\begin{tikzpicture}[background rectangle/.style={fill=red!25}, show background rectangle]
	%Erster Plot
		\begin{axis}[width=8cm,height=6cm,xlabel={X-Achse},ylabel={Y-Achse}]
			\addplot[color=red] coordinates {(0,0)(1,1)(2,0.5)(4,2)(5,1)};
		\end{axis}
	\end{tikzpicture}
	\hspace{0.5cm} %Abstand zwischen den zwei Plots
	\begin{tikzpicture}[background rectangle/.style={fill=red!25}, show background rectangle]
	%Zweiter Plot
		\begin{axis}[width=8cm,height=6cm,xlabel={X-Achse},ylabel={Y-Achse}]
			\addplot[color=red] coordinates {(0,0)(1,4)(2,1)(4,3)(5,2)};
		\end{axis}
	\end{tikzpicture}
\end{figure}
\end{document}
Ich vermute mal das es darin liegt, dass links und rechts bei jedem einzelnen Plot noch ein kleiner Abstand hinzugefügt wird, wie man durch die Hintergrundfarbe gut sehen kann, sodass jeder Plot nicht 8cm breit ist sondern ein kleines bisschen mehr. Weiß jemand, wie ich das umgehen kann?

Und wie kann ich den Abstand zwischen der Y-Achse und der Y-Achsenbeschriftung reduzieren?

Danke,
Gruß Gerd

Gast

Beitrag von Gast »

Da gibt es zum einen zwei unerwünschte Leerzeichen vor und nach dem \hspace zwischen den beiden tikzpicture-Umgebungen. Zum anderen haben selbige auch noch einen inneren Abstand:
\documentclass[12pt,a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
\geometry{a4paper,left=20mm,right=20mm}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}% Sollte man immer unmittelbar nach dem Laden von
                         % pgfplots angeben!
\parindent0pt% Sollte man nie machen! Ggf. Paket parskip verwenden!
\begin{document}
\begin{figure}[b]
\centering
\begin{tikzpicture}[background rectangle/.style={fill=red!25}, show background
  rectangle,inner sep=0pt]
%Erster Plot
\begin{axis}[width=8cm,height=6cm,xlabel={X-Achse},ylabel={Y-Achse}]
\addplot[color=red] coordinates {(0,0)(1,1)(2,0.5)(4,2)(5,1)};
\end{axis}
\end{tikzpicture}%
\hspace{0.5cm}%Abstand zwischen den zwei Plots
\begin{tikzpicture}[background rectangle/.style={fill=red!25}, show background
  rectangle,inner sep=0pt]
%Zweiter Plot
\begin{axis}[width=8cm,height=6cm,xlabel={X-Achse},ylabel={Y-Achse}]
\addplot[color=red] coordinates {(0,0)(1,4)(2,1)(4,3)(5,2)};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
Beachte unbedingt auch die weiteren Kommentare im Quellcode.

Gast

Beitrag von Gast »

PS: Es sei an dieser Stelle auch noch auf das sehr schöne Paket subcaption hingewiesen.

Gerd

Beitrag von Gerd »

Hallo,

vielen Dank für Deine Antwort.
Leider macht mir inner sep=0pt die Zahlen zu nah an die Achsen. Ich habe mich deshalb für das vorgeschlagene Paket subcaption entschieden, da ich sowiso noch Bildunterschriften benötige, vielen Dank für den Hinweis.
Das \hspace lasse ich nun weg, weil mir der Abstand zwischen den Plots völlig aussreicht. Mein Problem ist nun allerdings, dass links ein viel geringerer Abstand zum Seitenrand ist als rechts. Ich persönlich finde das etwas unschön und würde dies gerne vermeiden. Wie könnte ich das hinbekommen?
Hier das Minimalbeispiel:
\documentclass[12pt,a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{subcaption}
\usepackage[a4paper]{geometry}
\geometry{a4paper,left=20mm,right=20mm}
\usepackage{tikz}
\usepackage{pgfplots}
%\pgfplotsset{compat=1.14}
\usepackage{parskip} %\parindent0pt
\usepackage{showframe}
\begin{document}
\begin{figure}[htb]
	\begin{subfigure}{.5\linewidth}
		\begin{tikzpicture}
		\centering
			\begin{axis}[width=8cm,height=6cm,xlabel={X-Achse},ylabel={Y-Achse}]
				\addplot[color=red] coordinates {(0,0)(1,1)(2,0.5)(4,2)(5,1)};
			\end{axis}
		\end{tikzpicture}
		\caption{Erster Plot}
	\end{subfigure}
	\begin{subfigure}{.5\linewidth}
		\begin{tikzpicture}
		\centering
			\begin{axis}[width=8cm,height=6cm,xlabel={X-Achse},ylabel={Y-Achse}]
				\addplot[color=red] coordinates {(0,0)(1,4)(2,1)(4,3)(5,2)};
			\end{axis}
		\end{tikzpicture}
		\caption{Zweiter Plot}\label{fig:1b}
	\end{subfigure}
	\caption{2 Plots nebeneinnander}
\end{figure}
\end{document}
Zu den anderen beiden Bemerkungen:
1. Der Befehl \pgfplotsset{compat=1.14} gibt bei mir folgende Fehlemeldung:
! Package pgfkeys Error: Choice '1.14' unknown in choice key '/pgfplots/compat/anchors'. I am going to ignore this key.See the pgfkeys package documentation for explanation.Type H <return> for immediate help.... 
2. Ich habe nun \usepackage{parskip} verwendet, obowhl das auf den ersten Blick nichts anderes macht als \parindent0pt. Mein Ziel ist es lediglich, dass bei einem neuen Absatz nicht eingerückt wird.

Danke,
Gruß Gerd

Gast

Beitrag von Gast »

Dein pgfplots ist veraltet. Mach entweder ein Update oder schau in der zugehörigen Anleitung nach, welche Version Du verwendest und gib diese an.

Lediglich den Absatzeinzug abzuschalten ist nicht günstig. Damit werden Absätze nicht mehr ausgezeichnet. Abhängig von der zufällig Füllung der letzten Zeile eines Absatzes ist der nachfolgende nicht mehr erkennbar. Damit sind Absätze beliebig. Man sollte immer entweder Absatzeinzug oder Absatzabstand verwenden (Einzug gilt allgemein als überlegen). Daher der Rat zu Paket parskip. In der [d]parskip[/d]-Anleitung finden sich weitere Möglichkeiten des Pakets.

Du hast erneut ein unerwünschtes Leerzeichen durch ein nicht auskommentiertes Zeilenende nach dem ersten \end{subfigure}.

Ich würde übrigens \subcaptionbox für die beiden Bilder verwenden. Falls das bei Dir nicht funktioniert, musst Du auch subcaption (und ggf. auch caption).
\documentclass[12pt,a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{subcaption}
\usepackage[a4paper]{geometry}
\geometry{a4paper,left=20mm,right=20mm}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}% besser durch konkrete Version ersetzen!
\usepackage{parskip} %\parindent0pt
\usepackage{showframe}
\begin{document}
\begin{figure}[htb]
   \centering
   \subcaptionbox{Erster Plot}{%
     \begin{tikzpicture}
       \begin{axis}[width=8cm,height=6cm,xlabel={X-Achse},ylabel={Y-Achse}]
         \addplot[color=red] coordinates {(0,0)(1,1)(2,0.5)(4,2)(5,1)};
       \end{axis}
     \end{tikzpicture}%
   } % <-- Hier absichtlich ein Leerzeichen Abstand gelassen
   \subcaptionbox{Zweiter Plot\label{fig:1b}}{%
      \begin{tikzpicture}
      \begin{axis}[width=8cm,height=6cm,xlabel={X-Achse},ylabel={Y-Achse}]
         \addplot[color=red] coordinates {(0,0)(1,4)(2,1)(4,3)(5,2)};
       \end{axis}
     \end{tikzpicture}
   }%
   \caption{2 Plots nebeneinnander}
\end{figure}
\end{document}
BTW: Falls eine KOMA-Script-Klasse verwendet wird (wozu ich durchaus raten würde), verwendet man übrigens nicht Paket parskip, sondern gibt bei \documentclass Option parskip an. KOMA-Script bietet für die Option unterschiedliche Werte, die in der Anleitung nachzulesen sind.

Gerd

Beitrag von Gerd »

Hallo,

vielen Dank für Deine Hilfe, es funktioniert nun wunderbar, genau das was ich wollte. Und vielen Dank auch für die sonstigen Anmerkungen.

Danke,
Gruß Gerd

Antworten