¿Cómo puedo colocar un recuadro dentro de un eje de pgfplots usando las coordenadas del eje principal?

¿Cómo puedo colocar un recuadro dentro de un eje de pgfplots usando las coordenadas del eje principal?

Me gustaría colocar un eje insertado dentro de un eje principal con pgplots. La posición, el ancho y la altura del eje insertado deben especificarse utilizando las coordenadas de datos del eje principal. Esto es lo que obtuve hasta ahora:

\documentclass{article} 
\usepackage{pgfplots}
\begin{document} 
\begin{tikzpicture}
  \begin{axis}[width=\textwidth,name=mainplot] 
    \addplot {x};
    \coordinate (insetSW) at (axis cs:-4,2); % south west corner of inset
    \coordinate (insetNE) at (axis cs:-2,4); % north east corner of inset
  \end{axis} 
  \begin{axis}[at={(insetSW)},anchor=south west,name=inset] 
    \addplot {x};
  \end{axis} 
\end{tikzpicture} 
\end{document}

La esquina suroeste del recuadro está en la posición correcta. ¿Cómo puedo calcular el ancho y el alto del recuadro, de modo que su esquina noreste esté en insetNE?

¿O es posible especificar las dimensiones del eje proporcionando dos coordenadas \begin{axis}[..]?

Respuesta1

Una posible solución es calcular el ancho y el alto mediante las coordenadas dadas dentro de una letdeclaración. Entoncesguardar el resultado del cálculo en una macroy utilice esta macro al crear el eje de inserción. Aquí hay un MWE:

\documentclass{article} 
\usepackage{pgfplots}
\usetikzlibrary{calc}
\begin{document} 
\begin{tikzpicture}  
  \pgfkeys{/tikz/savenumber/.code 2 args={\global\edef#1{#2}}}
  \begin{axis}[width=200pt,name=mainplot,xtick={-4,0},ytick={2,6},grid] 
    \addplot {x};
    \coordinate (insetSW) at (axis cs:-4,2); % south west corner of inset
    \coordinate (insetNE) at (axis cs:0,6); % north east corner of inset
    \path
      let
        \p1 = (insetSW),
        \p2 = (insetNE),
        \n1 = {(\x2 - \x1)},
        \n2 = {(\y2 - \y1)}
      in    
      [savenumber={\insetwidth}{\n1},savenumber={\insetheight}{\n2}];
  \end{axis}
  \begin{axis}[
    at={(insetSW)}, anchor=south west, name=inset, width=\insetwidth,
    height=\insetheight, xticklabels={}, yticklabels={}, scale only axis]
    \addplot {x};
  \end{axis} 
\end{tikzpicture}

% DEBUG
inset width: \insetwidth,
inset height: \insetheight,
\end{document}

que produce

Captura de pantalla de la salida del código anterior.

El recuadro tiene la posición deseada con la esquina inferior izquierda en (-4,2)y la esquina superior derecha en (0,6). Las etiquetas de marca del eje insertado se han eliminado para evitar width/height is too small...errores. La llave scale only axisdebe colocarse en el eje insertado, de modo que el eje coincida exactamente con las dimensiones deseadas.

¡Los comentarios/respuestas alternativas son bienvenidos!

información relacionada