Ich verwende die Bibliothek von pgfplots
für meine Grafiken und muss das Paket aus Kompatibilitätsgründen verwenden.tikz
external
subfigure
Wie Sie im folgenden MWE (Teil „Versuch 1“) sehen können, figure*
platziere ich innerhalb einer Umgebung (die ich verwenden muss) zwei kleine Unterfiguren, und ich möchte, dass die Legende (die beiden Figuren gemeinsam ist) zwischen ihnen steht, möglicherweise auf halber Höhe. Obwohl ich verschiedene Legendenpositionsspezifikationen ausprobiert habe, bewegt sich die Legende jedoch keinen Millimeter, egal was ich mache.
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[pdftex]{graphicx}
\graphicspath{{./img/}}
\DeclareGraphicsExtensions{.pdf}
\usepackage{subfigure}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\tikzsetexternalprefix{tikzpics/}
\pgfplotsset{compat=newest, every mark/.append style={mark size=1pt, mark line=solid}}
\begin{document}
%%%%%%%%% Attempt 1
\begin{figure*}[t!]
\centering
\subfigure[First]{
\begin{tikzpicture}
\begin{axis}[width=0.4\textwidth,xlabel={X axis}, ylabel={Y axis},]
\addplot [blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}] coordinates {(-0.5,-1) (1,1)};
\addplot [green, mark=*, ultra thick] coordinates {(-0.5,-0.9) (1,1.1)};
\addplot [red, mark=square*, dotted, ultra thick] coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}\hfil
\subfigure{
\begin{tikzpicture}
\begin{axis}[width=0.2\textwidth, height=0.2\textwidth, hide axis, xmin=0, xmax=10, ymin=0, ymax=0.2,legend columns=1,
legend style={draw=white!15!black,legend cell align=left, at={(0.5,0.5)}},]
\addlegendimage{blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}}
\addlegendentry{Trace 1}
\addlegendimage{green, mark=*, ultra thick}
\addlegendentry{Trace 2}
\addlegendimage{red, mark=square*, dotted, ultra thick, mark options={solid,scale=1.5}}
\addlegendentry{Trace 3}
\end{axis}
\end{tikzpicture}}\hfil
\subfigure[Second]{
\begin{tikzpicture}
\begin{axis}[width=0.4\textwidth,xlabel={X axis}, ylabel={Y axis},]
\addplot [blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}] coordinates {(-0.5,-1) (1,1)};
\addplot [green, mark=*, ultra thick] coordinates {(-0.5,-0.9) (1,1.1)};
\addplot [red, mark=square*, dotted, ultra thick] coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}
\caption{Caption.}
\end{figure*}
%%%%%%%%% Attempt 2
\begin{figure*}[t!]
\centering
\subfigure[First]{
\begin{tikzpicture}
\begin{axis}[width=0.4\textwidth,xlabel={X axis}, ylabel={Y axis}, legend style={overlay, at={(1.2,0.5)},anchor={north}}]
\addplot [blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}] coordinates {(-0.5,-1) (1,1)};
\addplot [green, mark=*, ultra thick] coordinates {(-0.5,-0.9) (1,1.1)};
\addplot [red, mark=square*, dotted, ultra thick] coordinates {(-0.5,-1.1) (1,0.9)};
\legend{Trace 1, Trace 2, Trace 3};
\end{axis}
\end{tikzpicture}}\hfil
\subfigure[Second]{
\begin{tikzpicture}
\begin{axis}[width=0.4\textwidth,xlabel={X axis}, ylabel={Y axis},]
\addplot [blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}] coordinates {(-0.5,-1) (1,1)};
\addplot [green, mark=*, ultra thick] coordinates {(-0.5,-0.9) (1,1.1)};
\addplot [red, mark=square*, dotted, ultra thick] coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}
\caption{Caption.}
\end{figure*}
\end{document}
Als zweiten Versuch habe ich versucht, die overlay
Option der axis
Umgebung zu verwenden (siehe Teil „Versuch 2“ im obigen MWE). Diesmal sehe ich, dass die subfigure
Umgebung den Teil der Legende abschneidet, der außerhalb des Plots liegt (siehe Bild unten), und ich kann anscheinend keine Option finden, dies zu vermeiden.
Nur um es zu erwähnen: Ich habe auch versucht, pgfplots
die Option ' legend to name
+ ' zu verwenden \ref
, aber selbst als ich mit den verschiedenen Optionen zur Externalisierung herumgespielt habe, ist es mir nicht gelungen.
Jeder Vorschlag ist willkommen, Danke im Voraus.
Antwort1
baseline
Sie könnten die Option für das s verwenden tikzpicture
, scheint auch für externalisierte Grafiken zu funktionieren. Ich füge name=ax
den axis
Optionen (oder legend style
) hinzu und verwende baseline=(ax.center)
für alle drei. Ich habe auch das \subfigure{}
um die Mitte herum entfernt tikzpicture
, da es nicht benötigt wird.
Als Nachtrag: In einem solchen Fall könnte es sinnvoll sein, eine benutzerdefinierte Zyklusliste zu erstellen, sodass Sie die Plotstile nicht dreimal duplizieren müssen.
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[pdftex]{graphicx}
\graphicspath{{./img/}}
\DeclareGraphicsExtensions{.pdf}
\usepackage{subfigure}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzexternalize
\tikzsetexternalprefix{tikzpics/}
\pgfplotsset{
compat=newest,
every mark/.append style={mark size=1pt, mark line=solid},
}
% create a custom cycle list:
\pgfplotscreateplotcyclelist{MyList}{
blue, mark=diamond*, densely dashed, ultra thick, mark options={solid,scale=1.5}\\
green, mark=*, ultra thick\\
red, mark=square*, mark options={solid}, mark size=3pt,dotted, ultra thick\\
}
\begin{document}
\begin{figure*}
\centering
\subfigure[First]{
\begin{tikzpicture}[baseline=(ax.center)] % <-- added baseline
\begin{axis}[
name=ax, % added
cycle list name=MyList, % added
width=0.4\textwidth,
xlabel={X axis},
ylabel={Y axis}
]
\addplot coordinates {(-0.5,-1) (1,1)};
\addplot coordinates {(-0.5,-0.9) (1,1.1)};
\addplot coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}\hfil
\begin{tikzpicture}[baseline=(leg.center)] % <-- added baseline
\begin{axis}[
cycle list name=MyList, % added
width=0.2\textwidth, height=0.2\textwidth,
hide axis,
xmin=0, xmax=10, ymin=0, ymax=0.2,
legend columns=1,
legend style={
name=leg, % added
draw=white!15!black,
legend cell align=left,
at={(0.5,0.5)}
}]
% add three dummy plots, the single point is outside the axis limits, so not shown
\pgfplotsinvokeforeach{1,2,3}{\addplot coordinates {(0,-1)};}
\addlegendentry{Trace 1}
\addlegendentry{Trace 2}
\addlegendentry{Trace 3}
\end{axis}
\end{tikzpicture}\hfil
\subfigure[Second]{
\begin{tikzpicture}[baseline=(ax.center)] % <-- added baseline option
\begin{axis}[
name=ax, % added
cycle list name=MyList, % added
width=0.4\textwidth,
xlabel={X axis}, ylabel={Y axis},
]
\addplot coordinates {(-0.5,-1) (1,1)};
\addplot coordinates {(-0.5,-0.9) (1,1.1)};
\addplot coordinates {(-0.5,-1.1) (1,0.9)};
\end{axis}
\end{tikzpicture}}
\caption{Caption.}
\end{figure*}
\end{document}