Alignment mehrerer tikz pictures untereinander mit zwei y ac

Tabellen und Grafiken erstellen und anordnen


homer5785

Alignment mehrerer tikz pictures untereinander mit zwei y ac

Beitrag von homer5785 »

Hallo Leute,

ich habe eine Frage zur Positionierung von tikzpictures, für Minimalbeispiel siehe anbei.
Zur Anordnung der beiden pgf-plots mit gleicher x Achse nutze ich "trim axis left" als Argument für den tikz-Aufruf. Das funktioniert auch wunderschön, solange keine zweite y-Achse ins Spiel kommt. Ich möchte eines der beiden Bilder mit zwei y Achsen haben (per axis-overlay) und die Zeichenbereiche sollen exakt gleich breit sein.
Könnt ihr mir helfen? Vielen Dank

Andreas

\documentclass[a4paper,12pt]{scrreprt}
\usepackage{lmodern}
\usepackage{pifont}
\usepackage[german]{babel}
\selectlanguage{german}
\usepackage[T1]{fontenc}
\usepackage{float}
\usepackage[hang,font=singlespacing]{caption}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{/pgf/number format/use comma, compat=newest}
\usetikzlibrary{patterns}
\usepackage{subfig}

\begin{document}
\begin{figure}
\begin{center}

\subfloat[Plot1]{
\begin{tikzpicture}[trim axis left]
	\begin{axis}[width=0.8\textwidth,height=0.35\textheight,
	%axis  y  line*=left,%    the  ’*’  avoids  arrow  heads
	grid,
	xlabel near ticks,
  ylabel near ticks,
	xmin=0,
	xmax=6,
	xlabel={t}]
	\addplot coordinates {(1,6.45)(2,3.4)(3,4.8)(4,4.1)(5,4.4)};

	\end{axis}
%
	\begin{axis}[width=0.8\textwidth,height=0.35\textheight,
	axis  y  line*=right,
	grid,
	xmin=0,
	xmax=6,
	xlabel near ticks,
  ylabel near ticks]
      \addplot coordinates {(1,66.4)(2,43.4)(3,4.8)(4,4.1)(5,9.4)};
		\end{axis}
\end{tikzpicture}

}

\subfloat[Plot2]{
\begin{tikzpicture}[trim axis left]
	  \begin{axis}[width=0.8\textwidth,height=0.3\textheight,
		grid,
		xmin=0,
   	xmax=6,
		xlabel={t},
		legend pos=north east]
      \addplot coordinates {(1,6666.4)(2,433.4)(3,4.8)(4,4.1)(5,9.4)};
			\end{axis}
			
		
	\end{tikzpicture}
}

\caption{Schöner Mist}
\end{center}
\end{figure}

\end{document}

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Das ist ein Crosspost zu TeX.Stackexchange.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Was für links geht, klappt auch mit rechts
\begin{tikzpicture}[trim axis left,trim axis right]
Bild

Code mit ein paar weiteren kleinen Änderungen:

\documentclass[a4paper,12pt]{scrreprt} 
\usepackage[utf8]{inputenc}% Angabe der Kodierung gegebenenfalls ändern
\usepackage{lmodern} 
\usepackage{pifont} 
\usepackage[ngerman]{babel}% <- neue Rechtschreibung
\usepackage[T1]{fontenc} 
\usepackage{pgfplots}% lädt auch tikz
\pgfplotsset{
  /pgf/number format/use comma,
  compat=1.12% derzeit aktuelle Version
} 
\usetikzlibrary{patterns} 
\usepackage{subfig} 

\begin{document} 
\begin{figure} 
\begin{center} 
\subfloat[Plot1]{ 
\begin{tikzpicture}[trim axis left,trim axis right] 
    \begin{axis}[width=0.8\textwidth,height=0.35\textheight, 
    axis y line*=left,% nur linke Achse, ohne Pfeil
    grid, 
    %xlabel near ticks, 
    %ylabel near ticks, 
    xmin=0, 
    xmax=6, 
    xlabel={t}] 
    \addplot coordinates {(1,6.45)(2,3.4)(3,4.8)(4,4.1)(5,4.4)}; 
    \end{axis} 
% 
    \begin{axis}[width=0.8\textwidth,height=0.35\textheight, 
    axis y line*=right,% nur rechte Aches, ohne Pfeil
    axis x line=none,% keine x-Achsen
    ymajorgrids,% nur y Gitterlinien
    xmin=0, 
    xmax=6, 
    %xlabel near ticks,
    %ylabel near ticks
    ] 
       \addplot coordinates {(1,66.4)(2,43.4)(3,4.8)(4,4.1)(5,9.4)}; 
       \end{axis} 
\end{tikzpicture} 
} 

\subfloat[Plot2]{ 
\begin{tikzpicture}[trim axis left,trim axis right] 
      \begin{axis}[width=0.8\textwidth,height=0.3\textheight, 
       grid, 
       xmin=0, 
       xmax=6, 
       xlabel={t}, 
       legend pos=north east] 
       \addplot coordinates {(1,6666.4)(2,433.4)(3,4.8)(4,4.1)(5,9.4)}; 
       \end{axis} 
    \end{tikzpicture} 
} 
\caption{Schöner Mist} 
\end{center} 
\end{figure} 
\end{document} 
Gruß
Elke
Dateianhänge
gl_plotalign.png
gl_plotalign.png (20.45 KiB) 3157 mal betrachtet

homer5785

Alignment mehrerer tikz pictures untereinander mit zwei y ac

Beitrag von homer5785 »

Hey sorry für die späte Rückmeldung, ich hatte nach Package-Update ein paar Tage mit meinem Dokument zu kämpfen. Danke für den Hinweis, das sieht gut aus.
Jetzt würde ich gern die Grafik noch auf textwidth erweitern sowie label hinzufügen. Dabei wird Label und Ticks über den Rand hinaus gemalt. Gibt es die Möglichkeit das so zu skalieren, dass sich alles gerade am breitesten Bild orientiert?
\documentclass[a4paper,12pt]{scrreprt}
\usepackage[ansinew]{inputenc}% Angabe der Kodierung gegebenenfalls ändern
\usepackage{lmodern}
\usepackage{pifont}
\usepackage{float}
\usepackage[ngerman]{babel}% <- neue Rechtschreibung
\usepackage[T1]{fontenc}
\usepackage{pgfplots}% lädt auch tikz
\pgfplotsset{
  /pgf/number format/use comma,
  compat=1.12% derzeit aktuelle Version
}
\usetikzlibrary{patterns}
\usepackage{subfig}

\begin{document}
Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text.
\begin{figure}[H]
\begin{center}
\subfloat[Plot1]{
\begin{tikzpicture}[trim axis left,trim axis right]
    \begin{axis}[width=\textwidth,height=0.3\textheight,
    axis y line*=left,% nur linke Achse, ohne Pfeil
    grid,
    %xlabel near ticks,
    %ylabel near ticks,
    xmin=0,
    xmax=6,
    xlabel={t},
		ylabel={I/A}]
    \addplot coordinates {(1,6.45)(2,3.4)(3,4.8)(4,4.1)(5,0.4)};
    \end{axis}
%
    \begin{axis}[width=\textwidth,height=0.3\textheight,
    axis y line*=right,% nur rechte Aches, ohne Pfeil
    axis x line=none,% keine x-Achsen
    ymajorgrids,% nur y Gitterlinien
		ylabel={U/V},
    xmin=0,
    xmax=6,
    ]
       \addplot coordinates {(1,66.4)(2,43.4)(3,4.8)(4,4.1)(5,-1200)};
       \end{axis}
\end{tikzpicture}
}

\subfloat[Plot2]{
\begin{tikzpicture}[trim axis left,trim axis right]
      \begin{axis}[width=\textwidth,height=0.3\textheight,
       grid,
       xmin=0,
       xmax=6,
       xlabel={t},
		ylabel={dI/dt/A/ns}
]
       \addplot coordinates {(1,6666.4)(2,433.4)(3,4.8)(4,4.1)(5,9.4)};
       \end{axis}
    \end{tikzpicture}
}
\caption{Schöner Mist}
\end{center}
Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. Das ist der Text. 
\end{figure}
\end{document}
Dankeschön

Andreas

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Hast Du Dir die Infos zu den Optionen trim axis left und trim axis right in der Dokumentation von [d]pgfplots[/d] mal durchgelesen? Alles was außerhalb der gerahmten Box ist, also die ganzen Beschriftungen links und rechts, nehmen für LaTeX keinen Platz mehr ein.

Abgesehen davon bedeutet width=\textwidth, dass die Achsen so breit sind, dass noch 45pt für die Beschriftung links oder rechts übrig sind, unabhängig davon, wie viel Platz die Beschriftung einnimmt. Es gibt aber noch andere Möglichkeiten die Breite zu beeinflussen - steht alles in der schon erwähnten Doku.

Du musst die Breite also händisch einstellen. Zur Orientierung kannst Du das Paket showframe laden. Außerdem würde ich die Breite und, falls sie ebenfalls einheitlich ist, die Höhe nur einmal am Anfang der figure Umgebung festlegen.
\documentclass[a4paper,12pt]{scrreprt} 
\usepackage[ansinew]{inputenc}% Angabe der Kodierung gegebenenfalls ändern 
\usepackage{lmodern} 
\usepackage{pifont} 
\usepackage{float} 
\usepackage[ngerman]{babel}% <- neue Rechtschreibung 
\usepackage[T1]{fontenc} 
\usepackage{pgfplots}% lädt auch tikz 
\pgfplotsset{ 
   /pgf/number format/use comma, 
   compat=1.12% derzeit aktuelle Version 
} 
\usetikzlibrary{patterns} 
\usepackage{subfig} 

\usepackage{showframe}% Seitenlayout anzeigen
\begin{document} 

\begin{figure}[htb]
\pgfplotsset{every axis/.append style={width=\textwidth-80pt,height=.3\textheight}} 
\begin{center} 
\subfloat[Plot1]{ 
\begin{tikzpicture}[trim axis left,trim axis right] 
     \begin{axis}[
     axis y line*=left,% nur linke Achse, ohne Pfeil 
     grid, 
     xmin=0, 
     xmax=6, 
     xlabel={t}, 
       ylabel={I/A}] 
     \addplot coordinates {(1,6.45)(2,3.4)(3,4.8)(4,4.1)(5,0.4)}; 
     \end{axis} 
% 
     \begin{axis}[
     axis y line*=right,% nur rechte Aches, ohne Pfeil 
     axis x line=none,% keine x-Achsen 
     ymajorgrids,% nur y Gitterlinien 
       ylabel={U/V}, 
     xmin=0, 
     xmax=6, 
     ] 
        \addplot coordinates {(1,66.4)(2,43.4)(3,4.8)(4,4.1)(5,-1200)}; 
        \end{axis} 
\end{tikzpicture} 
} 

\subfloat[Plot2]{ 
\begin{tikzpicture}[trim axis left,trim axis right] 
       \begin{axis}[
        grid, 
        xmin=0, 
        xmax=6, 
        xlabel={t}, 
       ylabel={dI/dt/A/ns} 
] 
        \addplot coordinates {(1,6666.4)(2,433.4)(3,4.8)(4,4.1)(5,9.4)}; 
        \end{axis} 
     \end{tikzpicture} 
} 
\caption{Schöner Mist} 
\end{center} 
\end{figure} 
\end{document}
Gruß
Elke

Antworten