Sobreposição Tikz com subfig, eixo e externalização

Sobreposição Tikz com subfig, eixo e externalização

Estou tentando desenhar linhas entre dois desenhos tikz diferentes, colocados em ambientes subfig, por exemplo, os cantos do pequeno retângulo azul na imagem à esquerda e os cantos do ambiente do eixo da imagem à direita.

Amostra

Como os dois números ficarão muito grandes, preciso exportá-los com a extensão externalize. Portanto, eu também gostaria de usar a subfigbiblioteca e não o groupplots.

Achei que funcionaria com remember pictureas palavras-chave e overlay, mas as primeiras tentativas só trouxeram erros, por isso temo que possa haver um conflito com remember picturee externalize. Já encontrei uma boa descriçãocomo fazer referência a cantos de um retângulo.

É possível desenhar linhas conforme indicado na imagem de exemplo? É possível combinar externalizeand subfig(se não, eu preferiria groupplotsand externalizebefore subfige no externalize, embora a imagem de sobreposição não precise ser 'externalizada')?

Aqui está meu exemplo 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}

Muito obrigado!

Responder1

Para ser mais completo, apresento uma versão resumida da groupplotsabordagem com sublegendas falsas e possível externalização. Existem abordagens diferentes (veja os comentários em questão), mas esta pareceu a mais fácil para mim. No entanto, para ográfico originalPercebi que linhas adicionais só deixam tudo bagunçado ...

Resultado

E aqui o 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}

informação relacionada