
Ich möchte eine eingefügte Achse innerhalb einer übergeordneten Achse platzieren pgplots
. Die Position, Breite und Höhe der eingefügten Achse sollten mit den Datenkoordinaten der übergeordneten Achse angegeben werden. Das habe ich bisher bekommen:
\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}
Die südwestliche Ecke des Einschubs befindet sich an der richtigen Position. Wie kann ich die Breite und Höhe des Einschubs berechnen, sodass seine nordöstliche Ecke bei liegt insetNE
?
Oder ist es möglich, die Achsendimensionen durch die Angabe von zwei Koordinaten festzulegen \begin{axis}[..]
?
Antwort1
Eine mögliche Lösung besteht darin, Breite und Höhe anhand der angegebenen Koordinaten innerhalb einer Anweisung zu berechnen let
. DannSpeichern Sie das Ergebnis der Berechnung in einem Makround verwenden Sie dieses Makro beim Erstellen der eingefügten Achse. Hier ist ein 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}
Das erzeugt
Der Einschub hat die gewünschte Position mit der unteren linken Ecke bei (-4,2)
und der oberen rechten Ecke bei (0,6)
. Die Teilstriche der Einschubachse wurden entfernt, um einen width/height is too small...
Fehler zu vermeiden. Der Schlüssel scale only axis
muss für die Einschubachse bereitgestellt werden, damit die Achse genau den gewünschten Abmessungen entspricht.
Kommentare/alternative Antworten sind herzlich willkommen!