Wie kann ich mithilfe der Koordinaten der übergeordneten Achse einen Einschub in eine pgfplots-Achse einfügen?

Wie kann ich mithilfe der Koordinaten der übergeordneten Achse einen Einschub in eine pgfplots-Achse einfügen?

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

Screenshot der Ausgabe des obigen Codes

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 axismuss für die Einschubachse bereitgestellt werden, damit die Achse genau den gewünschten Abmessungen entspricht.

Kommentare/alternative Antworten sind herzlich willkommen!

verwandte Informationen