Tikz-Overlay mit Subfig, Achse und Externalize

Tikz-Overlay mit Subfig, Achse und Externalize

Ich versuche, Linien zwischen zwei verschiedenen Tikz-Zeichnungen zu zeichnen, die in Unterfigurenumgebungen platziert sind, beispielsweise die Ecken des kleinen blauen Rechtecks ​​im linken Bild und die Ecken der Achsenumgebung des rechten Bildes.

Probe

Da die beiden Abbildungen sehr groß werden, muss ich sie mit exportieren externalize. Daher möchte ich auch die subfigBibliothek verwenden und nicht groupplots.

remember pictureIch dachte, es würde mit den Schlüsselwörtern und funktionieren , aber die ersten Versuche brachten nur Fehler, daher befürchte ich, dass es einen Konflikt mit und overlaygeben könnte . Ich habe bereits eine gute Beschreibung gefundenremember pictureexternalizeSo verweisen Sie auf die Ecken eines Rechtecks.

Ist es möglich, Linien wie im Beispielbild angegeben zu zeichnen? Ist dies in Kombination aus externalizeund möglich (falls nicht, würde ich und vor und kein subfigbevorzugen , obwohl das Overlay-Bild nicht „externalisiert“ werden muss)?groupplotsexternalizesubfigexternalize

Hier ist mein Minimalbeispiel:

\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}

Vielen Dank!

Antwort1

Der Vollständigkeit halber stelle ich eine Kurzversion des groupplots-Ansatzes mit gefälschten Untertiteln und möglicher Externalisierung vor. Es gibt verschiedene Ansätze (siehe Kommentare unter der Frage), aber dieser schien mir der einfachste. Für dieOriginalgrafikMir ist aufgefallen, dass zusätzliche Zeilen das Ganze nur chaotischer machen …

Ergebnis

Und hier der Code:

\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}

verwandte Informationen