Spy TikZ-Bibliothek: eine Erweiterung verschiedener Zoomfunktionen

Spy TikZ-Bibliothek: eine Erweiterung verschiedener Zoomfunktionen

Ausgehend von meineralte FrageIch habe einige Parameter geändert,
habe den Grund dafür aber nicht verstanden, da sich das Zentrum des Spions nicht darin befindet, $(4,3.5)$sondern näher am Punkt $(3.2,3)$(dieser Wert wurde von mir nach verschiedenen Kompilierungen angegeben).

\spy[green!70!black,size=2cm] on (3.2,3) in node [fill=white] at (8,1);

Danach stellt sich die Hauptfrage:

Ist es möglich, mit der Bibliothek von TikZ \usetikzlibrary{spy}eine Folge von verschiedenen rechteckigen Zooms wie in diesem Bild mit der gleichen Richtung zu haben (es stammt aus dem Buch CALCULUS von JAMES STEWART, 7. Auflage),

Bildbeschreibung hier eingeben

wo ist es möglich, die Beschriftungen des Zooms als in dieseFrage(sehr tolle Antwort vom User @Tobi)?

Bildbeschreibung hier eingeben

Hier füge ich mein MWE mit dem entsprechenden Screenshot hinzu.

Bildbeschreibung hier eingeben

    \documentclass{article}
    \usepackage{tikz,amsmath,xcolor}
    \usetikzlibrary{patterns}
    \usepackage{pgfplots}
    \usetikzlibrary{spy}
    \begin{document}
    \begin{tikzpicture}[spy using outlines={circle=.5cm, magnification=3, size=.5cm, connect spies}]
    \tikzset{
        hatch distance/.store in=\hatchdistance,
        hatch distance=10pt,
        hatch thickness/.store in=\hatchthickness,
        hatch thickness=2pt
    }
    \makeatletter
    \pgfdeclarepatternformonly[\hatchdistance,\hatchthickness]{flexible hatch}
    {\pgfqpoint{0pt}{0pt}}
    {\pgfqpoint{\hatchdistance}{\hatchdistance}}
    {\pgfpoint{\hatchdistance-1pt}{\hatchdistance-1pt}}%
    {
        \pgfsetcolor{\tikz@pattern@color}
        \pgfsetlinewidth{\hatchthickness}
        \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
        \pgfpathlineto{\pgfqpoint{\hatchdistance}{\hatchdistance}}
        \pgfusepath{stroke}
    }
    \makeatother
    \begin{axis}[
        xmin=-4,xmax=4,
        xlabel={},
        ymin=-3,ymax=3,
        axis on top,
        legend style={legend cell align=right,legend plot pos=right}] 
       \begin{scope}
       \spy[green!70!black,size=2cm] on (3.2,3) in node [fill=white] at (8,1);
       \end{scope}
    \addplot[color=gray,domain=-4:4,samples=100] {x^3};
\end{axis}
\end{tikzpicture}
\end{document}

Antwort1

Die Antworten, auf die Sie verlinken, scheinen zu sagen, dass sie die Zeichnung wiederholen, skalieren und ausschneiden. Dies kann schließlich zu Leistungsproblemen führen (auch wenn dies nicht bei so einfachen Diagrammen der Fall ist), sodass man es und s pfgfplotsverwenden möchte, um zu gelangen\saveboxpath picture

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\newsavebox\Axis
\begin{document}
\savebox\Axis{
\begin{tikzpicture}[declare function={f(\x)=pow(\x-1.5,3)-\x+3.5;}]
    \begin{axis}[
        xmin=-1,xmax=4,xlabel={$x$},xtick=\empty,
        ymin=-1,ymax=4,ylabel={$y$},ytick=\empty,
        axis lines=middle] 
    \addplot[color=cyan,thick,domain=-4:4,samples=51,smooth] {f(x)};
    \node[circle,fill,inner sep=1.5pt,cyan] at (2.2,{f(2.2)}){};
\end{axis}
\end{tikzpicture}}
\begin{tikzpicture}
 \node{\usebox\Axis};
 \node[draw,minimum size=0.5cm,purple] (s1) at (1,0.2){};
 \node[draw,minimum size=1cm,purple,
 path picture={\path (-1*2,-0.2*2) node[scale=2]{\usebox\Axis};}] (s1')
 at (2,0.2){};
 \node[draw,minimum size=0.5cm,purple] (s2) at (2,0.2){};
 \node[draw,minimum size=1cm,purple,
 path picture={\path (-1*3,-0.2*3) node[scale=3]{\usebox\Axis};}] (s2')
 at (3.5,0.2){};
 \foreach \X in {1,2}
 {\draw[dashed,purple] (s\X.north west) -- (s\X'.north west)
 (s\X.south west) -- (s\X'.south west);}
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Bitte beachten Sie, dass dies benutzerfreundlicher gestaltet werden kann. Da ich Ihren Code jedoch mehr oder weniger vollständig aufgeben musste, um zu etwas zu gelangen, das meiner Ansicht nach der Zielausgabe ähnelt, füge ich dies als Version 0.1 hinzu.

Nun, es scheint nicht das zu sein, was Sie wollen, aber es ist auch nicht so einfach zu erkennen, was Sie wollen.

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usetikzlibrary{calc}
\newsavebox\Axis
\begin{document}
\savebox\Axis{
\begin{tikzpicture}[declare function={f(\x)=pow(\x-1.5,3)-\x+3.5;}]
    \begin{axis}[
        xmin=-1,xmax=4,xlabel={$x$},xtick=\empty,
        ymin=-1,ymax=4,ylabel={$y$},ytick=\empty,
        axis lines=middle] 
    \addplot[color=cyan,thick,domain=-4:4,samples=51,smooth] {f(x)};
    \path (0,0) coordinate (O) (2.2,{f(2.2)}) node[circle,fill,inner
    sep=1.5pt,cyan] (a){};
\end{axis}
\end{tikzpicture}}
\begin{tikzpicture}[spy node/.style={draw=purple,minimum size=#1*0.5cm,
 path picture={{\path (-#1*\myx,-#1*\myy) node[scale=#1]{\usebox\Axis};}}}]
 \node[inner sep=0pt,outer sep=0pt]{\usebox\Axis};
 \path let \p1=($(a.center)-(current axis.center)$) in \pgfextra{\xdef\myx{\x1}\xdef\myy{\y1}}
 (\p1) coordinate (a');
 \node[draw,minimum size=0.5cm,purple] (s1) at (a'){};
 \node[spy node=2] (s1') at  ($(a')+(1,0)$){};
 \node[spy node=4] (s4') at  ($(a')+(3,0)$){};
\end{tikzpicture}
\end{document}

verwandte Informationen