
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 let
declaració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
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 axis
debe colocarse en el eje insertado, de modo que el eje coincida exactamente con las dimensiones deseadas.
¡Los comentarios/respuestas alternativas son bienvenidos!