Estoy usando la biblioteca pgfplots
with para mis gráficos y debo usar el paquete por motivos de cumplimiento.tikz
external
subfigure
Como pueden ver en el mwe a continuación (parte "Intento 1"), dentro de un figure*
entorno (que debo usar) coloco dos pequeñas subfiguras, y me gustaría que la leyenda (común a ambas figuras) estuviera entre ellas, posiblemente en media altura. Sin embargo, aunque probé varias especificaciones de posición de la leyenda, no importa lo que haga, la leyenda no se mueve ni un solo milímetro.
\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}
Como segundo intento, intenté utilizar la overlay
opción del axis
entorno (consulte la parte "Intento 2" en el mwe anterior). Esta vez, veo que el subfigure
entorno recorta la parte de la leyenda que se encuentra fuera de la trama (ver imagen a continuación), y parece que no puedo encontrar ninguna opción para evitar esto.
Solo para mencionarlo, también intenté usar pgfplots
'opción legend to name
+' \ref
, pero ni siquiera jugando con las diversas opciones de externalización pude tener éxito.
Cualquier sugerencia es bienvenida, gracias de antemano.
Respuesta1
Podrías usar la baseline
opción tikzpicture
s, parece funcionar también para gráficos externalizados. Agrego name=ax
a las axis
opciones (o legend style
) y lo uso baseline=(ax.center)
para las tres. También eliminé el \subfigure{}
centro tikzpicture
, ya que no es necesario.
Como complemento, en un caso como este podría resultar útil crear una lista de ciclos personalizada, así no tendrá que duplicar los estilos de trazado tres veces.
\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}