
Estoy tratando de dibujar líneas entre dos dibujos tikz diferentes, colocados en entornos subfig, por ejemplo, las esquinas del pequeño rectángulo azul en la imagen de la izquierda y las esquinas del entorno del eje de la imagen derecha.
Como las dos figuras serán muy grandes, necesito exportarlas con externalize
. Por lo tanto, también me gustaría usar la subfig
biblioteca y no groupplots
.
Pensé que funcionaría con las palabras clave remember picture
y overlay
, pero los primeros intentos solo arrojaron errores, por lo que temo que pueda haber un conflicto con remember picture
y externalize
. ya encontré una buena descripcióncómo hacer referencia a las esquinas de un rectángulo.
¿Es posible dibujar líneas como se indica en la imagen de muestra? ¿Es posible en combinación con externalize
y subfig
(si no, preferiría groupplots
and externalize
before subfig
y no externalize
, aunque no es necesario "externalizar" la imagen superpuesta)?
Aquí está mi ejemplo mínimo:
\documentclass[parskip]{scrartcl}
\usepackage{tikz,pgfplots,subfig, lipsum}
% \usetikzlibrary{external}
% \tikzexternalize[figure list=true]
\begin{document}
\lipsum[1]
\begin{figure}[h]
\centering
\subfloat[Overview.]{
\begin{tikzpicture}[trim axis left, trim axis right]
\begin{axis}[domain=-10:10,x post scale=0.5]
\addplot+[red,mark=none]{x^2};
\draw[fill=blue,opacity=0.3] (axis cs:-2,-0.5) rectangle (axis cs:2,5);
\end{axis}
\end{tikzpicture}
}\quad
\subfloat[Detail.]{
\begin{tikzpicture}[trim axis left, trim axis right]
\begin{axis}[xmin=-2,xmax=2,ymin=-0.5,ymax=5,domain=-2:2,mark=none]
\addplot+[red,mark=none]{x^2};
\end{axis}
\end{tikzpicture}
}
\caption{Curve.}
\end{figure}
\lipsum[2]
\end{document}
¡Muchas gracias!
Respuesta1
En aras de la exhaustividad, presento una versión breve del groupplots
enfoque con subtítulos falsos y posible externalización. Hay diferentes enfoques (ver los comentarios bajo la pregunta), pero este me pareció el más fácil. Sin embargo, para elgráfico originalMe di cuenta de que las líneas adicionales sólo ensucian todo...
Y aquí el código:
\documentclass[parskip]{scrartcl}
\usepackage{tikz,pgfplots,subfig, lipsum}
\usetikzlibrary{pgfplots.groupplots}
\usetikzlibrary{fit,intersections,}
\makeatletter
\tikzset{ % fitting node, see http://goo.gl/KOvpQ
fitting node/.style={
inner sep=0pt,
fill=none,
draw=none,
reset transform,
fit={(\pgf@pathminx,\pgf@pathminy) (\pgf@pathmaxx,\pgf@pathmaxy)}
},
reset transform/.code={\pgftransformreset}
}
\makeatother
% \usetikzlibrary{external}
% \tikzexternalize[figure list=true]
\begin{document}
\lipsum[1]
\begin{figure}[h]
\centering
\begin{tikzpicture}
\begin{groupplot}[domain=-10:10,group style={group size=2 by 1,vertical sep=0.7cm,horizontal sep=1.05cm,xlabels at=edge bottom,ylabels at=edge left},x label style={font=\footnotesize}]
\nextgroupplot[x post scale=0.5,xlabel={(a) Overview.},]
\addplot+[red,mark=none]{x^2};
\draw[fill=blue,opacity=0.3] (axis cs:-2,-0.5) rectangle (axis cs:2,5) node[fitting node] (rect) {};
\nextgroupplot[xmin=-2,xmax=2,ymin=-0.5,ymax=5,domain=-2:2,mark=none,x post scale=0.9, xlabel={(b) Detail.}]
\addplot+[red,mark=none]{x^2};
\end{groupplot}
\draw[dashed] (rect.north west) -- (group c2r1.north west);
\draw[dashed] (rect.south west) -- (group c2r1.south west);
\path[name path=lineA] (rect.south east) -- (group c2r1.south east);
\path[name path=lineB] (rect.north east) -- (group c2r1.north east);
\path[name path=lineC] (group c2r1.north west) -- (group c2r1.south west);
\draw [dashed,name intersections={of=lineA and lineC, by=pA}] (rect.south east) -- (pA);
\draw [dashed,name intersections={of=lineB and lineC, by=pB}] (rect.north east) -- (pB);
\draw [dashed,gray!90,opacity=0.7] (pA) -- (group c2r1.south east);
\draw [dashed,gray!90,opacity=0.7] (pB) -- (group c2r1.north east);
\end{tikzpicture}
\end{figure}
\lipsum[2]
\end{document}