
Ich möchte einige meiner Tikz-Bilder in Unterabbildungen entlang der Y-Achse skalieren, um Platz zu sparen. Aber beim Skalieren werden die Bilder nicht mehr ausgerichtet. Ich möchte sie skalieren, um vertikalen Platz zu sparen. Ich möchte die Höhe der Achse nicht direkt skalieren, da dann (automatisch) kleinere Markierungen verschwinden (übrigens hätte ich sie auch gerne in der richtigen Abbildung). Was ich habe, ist
Was ich will ist (oder ähnlich)
Mein Code ist
\documentclass{article}
\usepackage{subcaption}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\pgfplotsset{compat=newest}
\begin{filecontents}{tabelle1.tex}
4 36.56 26.68
128 24298.04 300000
\end{filecontents}
\begin{filecontents}{tabelle2.tex}
4 24004.4 24004.4
64 240034.08 251182.32
\end{filecontents}
\begin{document}
\hrule
\begin{figure}[tbph]
\centering
\begin{subfigure}[t]{0.45\textwidth}
\centering
\resizebox{1\textwidth}{!}{% %I want to them to fit in their subfigure
\begin{tikzpicture}
\footnotesize
\begin{axis}[
yscale=0.7 % needed to reduce vertical space
,height=\textwidth % fixed height and width for both, should lead to same scaling
,width=\textwidth % and therefore same size in the end, letting them sit together nicely
,xtick=data
,axis y line=left
,ymin=10
,ymode=log
,legend style={at={(1,0.1)},anchor=south east} % turn this off and its somewhere it should not be
]
\addplot table [x index=0,y index=1] {tabelle1.tex};\addlegendentry{A}
\addplot table [x index=0,y index=2] {tabelle1.tex};\addlegendentry{B}
\end{axis}
\end{tikzpicture}
}
\caption{a caption}
\end{subfigure}%
\hfill%
\begin{subfigure}[t]{0.45\textwidth}
\centering
\resizebox{1\textwidth}{!}{%
\begin{tikzpicture}
\footnotesize
\begin{axis}[
yscale=0.7
,height=\textwidth
,width=\textwidth
,xtick=data
,axis y line=left
,ymin=10000
,ymode=log
,legend style={at={(1,0.1)},anchor=south east}
]
\addplot table [x index=0,y index=1] {tabelle2.tex};\addlegendentry{A}
\addplot table [x index=0,y index=2] {tabelle2.tex};\addlegendentry{B}
\end{axis}
\end{tikzpicture}
}
\caption{b caption}
\end{subfigure}
\caption{main caption}
\end{figure}
\end{document}
Bisher habe ich herausgefunden, dass es eine Verbindung zwischen yscale
, ymode
und zu geben scheint legend style
. Wenn man es ein- yscale
oder ymode
ausschaltet, funktioniert es. legend style
Manchmal funktioniert es, ich konnte keine Regel finden. Das Ziel wurde ohne kompiliert yscale
. Ich möchte alle drei. Genauer gesagt: etwas, das das gleiche Ergebnis liefert.
Wie erreiche ich das?
Ich habe noch mehr ähnliche Figuren, wenn ich also etwas daraus lerne, umso besser. Wenn nötig, ist es ok, alles neu zu schreiben.
Antwort1
Bearbeiten:
Hinzugefügt wurden Y-Achsenbeschriftungen und eine korrektere Anpassung der Diagrammbreite an die \subfigure
S-Breite.
Anstatt das Bild zu skalieren, ist es besser, seine Breite an die Breite von anzupassen subfigure
:
\documentclass{article}
%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\usepackage{subcaption}
\usepackage{pgfplots}
%\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.18}
\begin{filecontents}{tabelle1.tex}
4 36.56 26.68
128 24298.04 300000
\end{filecontents}
\begin{filecontents}{tabelle2.tex}
4 24004.4 24004.4
64 240034.08 251182.32
\end{filecontents}
\begin{document}
\begin{figure}[tbph]
\pgfplotsset{
height=6cm,
width = \linewidth, % <---
xtick = data,
% axis y line=left, % <--- if you liked
legend pos=south east,
}
\begin{subfigure}[t]{0.5\textwidth}\raggedright
\begin{tikzpicture}
\begin{semilogyaxis}[
ymin=10,
ylabel = some text,
]
\addplot table [x index=0,y index=1] {tabelle1.tex};
\addplot table [x index=0,y index=2] {tabelle1.tex};
\legend{A, B}
\end{semilogyaxis}
\end{tikzpicture}
\caption{subfigure A caption}
\end{subfigure}
\hfil
\begin{subfigure}[t]{0.5\textwidth}\raggedleft
\begin{tikzpicture}
\begin{semilogyaxis}[
ymin=10000,
ylabel = some text,
]
\addplot table [x index=0,y index=1] {tabelle2.tex};
\addplot table [x index=0,y index=2] {tabelle2.tex};
\legend{A, B}
\end{semilogyaxis}
\end{tikzpicture}
\caption{subfigure B caption}
\end{subfigure}%
\caption{Main caption}
\end{figure}
\end{document}
(rote Linien zeigen die Grenzen des Textfelds an)
Antwort2
Verwenden Sie eine Gruppe mit 2 Spalten und 1 Zeile, um die Abbildungen auszurichten.
Zur einfacheren Konfiguration und Positionierung wurden die Unterüberschriften als Knoten eingefügt.
\documentclass[12pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{groupplots}
\usepackage{caption,subcaption}
\usepackage{pgfplotstable}
\usepackage{tikz}
\begin{filecontents}{tabelle1.tex}
4 36.56 26.68
128 24298.04 300000
\end{filecontents}
\begin{filecontents}{tabelle2.tex}
4 24004.4 24004.4
64 240034.08 251182.32
\end{filecontents}
\begin{document}
\begin{figure}[!htp]
\centering\footnotesize
\begin{tikzpicture}
\begin{groupplot}[
group style={
group name=my plots,
group size= 2 by 1,
horizontal sep =2.0cm,
},
legend style={at={(1.0,0.05)},anchor=south east},
height=0.45\textwidth,
width=0.45\textwidth,
xtick=data,
axis y line=left,
ymode=log
]
\nextgroupplot[ymin=10]
\addplot table [x index=0,y index=1] {tabelle1.tex};\addlegendentry{A}
\addplot table [x index=0,y index=2] {tabelle1.tex};\addlegendentry{B}
\nextgroupplot[ymin=10000]
\addplot table [x index=0,y index=1] {tabelle2.tex};\addlegendentry{A}
\addplot table [x index=0,y index=2] {tabelle2.tex};\addlegendentry{B}
\end{groupplot}
\tikzset{SubCaption/.style={
text width=0.4\textwidth,
yshift=-3mm,
align=center,anchor=north
}}
\node[SubCaption] at (my plots c1r1.south) {\subcaption{First graph a}\label{subplot:one}};
\node[SubCaption] at (my plots c2r1.south) {\subcaption{Second graph b}\label{subplot:two}};
\end{tikzpicture}
\caption{Main caption}\label{fig:plots}
\end{figure}
\end{document}
Ich glaube nicht, dass Sie den Pfeil für die Y-Achse benötigen. Wenn axis y line*=left,
Sie verwenden, erhalten Sie