Anzeigen eines pgfplots-Diagramms über einem anderen pgfplots-Diagramm in TikZ

Anzeigen eines pgfplots-Diagramms über einem anderen pgfplots-Diagramm in TikZ

Ich habe zwei grafische Lösungen für eine Ungleichung (und eine algebraische Lösung dafür). Eine Lösung soll auf der Zahlenlinie und die andere Lösung auf der kartesischen Ebene angezeigt werden. Ich möchte, dass die Zahlenlinie und die x-Achse in der kartesischen Ebene vertikal ausgerichtet sind.

Die Ungleichung ist

\begin{equation*} \frac{6}{x - 5} \geq x \end{equation*}

und die Lösungsmenge ist $(-\infty,-1) \cup (5,6]$. Ich möchte also im ersten Diagramm Markierungen und Beschriftungen für -1, 5, und 6und eine dicke Linie links von -1und zwischen 5diesen 6. Für TikZhabe ich die folgenden Befehle verwendet.

\draw[line width=2pt, -latex] ($(-1,0) +(-3pt,0pt)$) -- (-2.9,0);
\draw[fill] (-1,0) circle (3pt);

\draw (5,0) circle (3pt);
\draw[fill] (6,0) circle (3pt);
\draw[line width=2pt] ($(5,0) +(3pt,0pt)$) -- ($(6,0) +(-3pt,0pt)$);

Ich bin nicht sicher, welche Befehle die entsprechenden pgfplotswären.

Der Code für die Zahlenreihe ließ sich nicht kompilieren. Ich habe den meisten Befehlen für die Zahlenreihe Kommentarzeilen vorangestellt.

Übrigens hätte ich die Punkte gerne mit einem schwarzen Kreis oder einem blauen Kreis markiert. Warum ist der Punkt (-1,-1)mit einer blauen Raute und der Punkt mit einem roten Kreis markiert?(6,6)(-1,-1)(6,6)

\documentclass{amsart}
\usepackage{amsmath}
\usepackage{amsfonts}

\usepackage{tikz}
\usetikzlibrary{calc,positioning,intersections}

\usepackage{pgfplots}
\pgfplotsset{compat=1.11}

\begin{document}


\noindent {\textbf{1.) }}Determine the solution set to
\begin{equation*}
\frac{6}{x - 5} \geq x .
\end{equation*}
Graph the solution set on the real number line.
\vskip0.2in

\noindent {\bf Solution} \vskip1.25mm
\noindent $q(x) = 6/(x - 5)$ is a rational function defined on ${\mathbb{R}}\setminus\{5\}$. On the interval $(5, \, \infty)$, $q(x) \geq x$ if, and only if,
\begin{equation*}
(x - 6)(x + 1) = x^{2} - 5x - 6 \leq 0 ,
\end{equation*}
or equivalently, $5 < x \leq 6$. Likewise, on the interval $(-\infty, \, 5)$, $q(x) \geq x$ if, and only if, $x \leq -1$. \rule{1.5ex}{1.5ex}
\vskip0.2in

\noindent \hspace*{\fill}
\begin{tikzpicture}
\begin{axis}[name=plot1, %height=0.5in, width=5in, clip=false,
%    xmin=-10,xmax=16,
%    xlabel=$x$,
%    axis line style={latex-latex},
%    xtick={},
%    extra x ticks={-1,5,6},
%    extra x tick labels={$-1$,5,6},
%    extra x tick style={xticklabel style={below}},
%    xlabel style={at={(ticklabel* cs:1)},anchor=north west}
    ]

  \end{axis}
\begin{axis}[name=plot2, at={($(plot1.south)+(0,-0.75cm)$)}, anchor=north, height=5in, width=5in,
    axis lines=middle, clip=false,
    xmin=-10,xmax=16,
    ymin=-10,ymax=16,
    restrict y to domain=-10:16,
    xtick={\empty},ytick={\empty},
    ticklabel style={font=\tiny,fill=white},
    extra x ticks={-1,6},
    extra x tick labels={$-1$,6},
    axis line style={latex-latex},
    xlabel=$x$,ylabel=$y$,
    enlargelimits={abs=0.25cm},
    xlabel style={at={(ticklabel* cs:1)},anchor=north west},
    ylabel style={at={(ticklabel* cs:1)},anchor=south west}
]
\addplot[samples=501,domain=-10:4.4, blue] {6/(x - 5)};
\addplot[samples=501,domain=5.4:16, blue] {6/(x - 5)} node[above,pos=0.9,font=\footnotesize]{$y=\dfrac{6}{x-5}$};

\addplot[latex-latex, samples=2, domain=-10:15] {x} node[anchor=west, pos=1, font=\footnotesize]{$y=x$};
\addplot[dashed, latex-latex, samples=2, domain=-10:16] (5,x) node [pos=0.05, anchor=north, font=\footnotesize, sloped] {$x=5$};

\addplot coordinates{(-1,-1)};
\addplot coordinates{(6,6)} node[anchor=west,font=\footnotesize]{$(6,6)$};
  \end{axis}

\end{tikzpicture}

\end{document}

Antwort1

PGFplots ermöglicht Ihnen die Nutzung aller üblichen Funktionen von TikZ innerhalb seiner {axis}Umgebung. Sie haben Zugriff auf das Koordinatensystem durch, axis csso dass \node at (axis cs: 3, 4) {};ein Knoten an derX-jKoordinate (3, 4). In Version 1.11 axis cswurde es zum Standardkoordinatensystem von TikZ innerhalb der {axis}Umgebungen, sodass Sie es nicht axis csjedes Mal angeben müssen und stattdessen einfach eingeben können \node at (3, 4) {};.

Ich stelle unten zwei sehr ähnliche Möglichkeiten vor, wie Sie (meiner Meinung nach) zeichnen können. Beide zeichnen die beiden relevanten Kurven ( xund 6 / (5 - x)), aber die erste verwendet auch dieX-Achse als Zahlenlinie, während die zweite die Zahlenlinie über dem Diagramm platziert.

Variante 1: Alles in Einem

Diese Lösung verwendet einen Achsensatz, um sowohl die entsprechenden Gleichungen für die Ungleichung anzuzeigen als auch den Teil der Zahlenlinie zu beschriften, für den die Ungleichung gilt:

\documentclass{amsart}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amsthm}
\usepackage{thmtools}

\declaretheoremstyle[
  headfont=\normalfont\bfseries,
  numbered=unless unique,
  bodyfont=\normalfont,
  spaceabove=1em plus 0.75em minus 0.25em,
  spacebelow=1em plus 0.75em minus 0.25em,
  qed={\rule{1.5ex}{1.5ex}},
]{solstyle}

\declaretheorem[
  style=solstyle,
  title=Solution,
  refname={solution,solutions},
  Refname={Solution,Solutions}
]{solution}

\usepackage{enumitem}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\begin{document}
\begin{enumerate}[label=\bfseries\arabic*)]
\item Determine the solution set to
  \begin{equation*}
    \frac{6}{x - 5} \geq x .
  \end{equation*}
  Graph the solution set on the real number line.

  \begin{solution}
    We first observe that there is a singularity at \(x = 5\) as we consider the
    region above and below \(5\) separately:
    \begin{description}
    \item[\(\boldsymbol{x > 5}\)] Over this interval, the denominator is always
      greater than zero.  As a result, multiplying both sides by \(x-5\) we
      obtain:
      \begin{align*} 
        & 6 \geq x^{2} - 5x \\
        \Leftrightarrow & 0 \geq x^{2} - 5x - 6 = (x-6)(x+1)
      \end{align*}
      Over the given domain, \(x+1\) is always positive; therefore, we must have
      that \(x-6 \leq 0\) and conclude that the inequality is satisfied only for
      \(5 < x \leq 6\).
    \item[\(\boldsymbol{x < 5}\)] Over this internal, the denominator is always
      less than zero.  As a result, multiplying both sides by \(x-5\) flips the
      inequality and we obtain:
      \begin{align*} 
        & 6 \leq x^{2} - 5x \\
        \Leftrightarrow & 0 \leq x^{2} - 5x - 6 = (x-6)(x+1)
      \end{align*}
      Over the given domain, \(x-6\) is always negative; therefore, we must have
      that \(x+1 \leq 0\) and conclude that the inequality is satisfied only for
      \(x \leq -1\).
    \end{description}
    The two relevant curves for this inequality are plotted below with the
    appropriate domain marked in red along the \(x\)-axis:
    \begin{center}
      \begin{tikzpicture}
        \begin{axis}[
            width=\linewidth,
            height=0.7\linewidth,
            axis lines=middle, 
            xlabel=\(x\),
            ylabel=\(y\),
            xlabel style={at={(ticklabel* cs:1)},anchor=west},
            ylabel style={at={(ticklabel* cs:1)},anchor=south},
            clip=false,
            domain=-5:10,
            samples=501,
            restrict y to domain=-10:16,
            clip=false,
          ]

          \addplot [blue] {6/(x - 5)} 
                  node [above, pos=0.95, font=\footnotesize] {\(y=\dfrac{6}{x-5}\)};
          \addplot [latex-latex] {x} 
                  node[anchor=west, pos=1, font=\footnotesize]{\(y=x\)};
          \draw [dashed, latex-latex] 
                (5,\pgfkeysvalueof{/pgfplots/ymin}) -- (5, \pgfkeysvalueof{/pgfplots/ymax})
                node [pos=0.05, below, sloped, font=\footnotesize] {\(x=5\)};

          \fill [blue] (-1, -1) circle [radius=2pt]
                      node [anchor=north, font=\footnotesize] {\((-1, -1)\)};
          \fill [blue] (6, 6) circle [radius=2pt]
                    node [anchor=west, font=\footnotesize] {\((6, 6)\)};

          \draw [-latex, red, very thick] (-1, 0) -- (\pgfkeysvalueof{/pgfplots/xmin}, 0);
          \draw [red, very thick] (5, 0) -- (6, 0);
          \fill [black] (-1, 0) circle [radius=2pt];
          \draw [draw=black, fill=white] (5, 0) circle [radius=2pt];
          \fill [black] (6, 0) circle [radius=2pt];
        \end{axis}
      \end{tikzpicture}
    \end{center}
  \end{solution}

\end{enumerate}
\end{document}

Ausgabe

Variante 2: Zahlenstrahl oben

Wenn Sie die Zahlenlinie von der Achse getrennt haben möchten (wie Sie es in der ursprünglichen Frage beabsichtigen), haben Sie im Grunde alles richtig gemacht:

\begin{center}
  \begin{tikzpicture}
    \begin{axis}[
        name=plot1,
        width=\linewidth,
        height=11em,
        axis x line=middle, 
        axis y line=none,
        clip=false,
        domain=-5:10,
        axis line style={latex-latex},
      ]
      \addplot [draw=none] {0};

      \draw [-latex, red, very thick] (-1, 0) -- (\pgfkeysvalueof{/pgfplots/xmin}, 0);
      \draw [red, very thick] (5, 0) -- (6, 0)
            node [above, pos=0] {\(5\)}
            node [above, pos=1] {\(6\)};
      \fill [black] (-1, 0) circle [radius=2pt]
            node [red, above] {\(-1\)};
      \draw [draw=black, fill=white] (5, 0) circle [radius=2pt];
      \fill [black] (6, 0) circle [radius=2pt];
    \end{axis}
    \begin{axis}[
        at=(plot1.south),
        anchor=north,
        width=\linewidth,
        height=0.7\linewidth,
        axis lines=middle, 
        xlabel=\(x\),
        ylabel=\(y\),
        xlabel style={at={(ticklabel* cs:1)},anchor=west},
        ylabel style={at={(ticklabel* cs:1)},anchor=south},
        clip=false,
        domain=-5:10,
        samples=501,
        restrict y to domain=-10:16,
        clip=false,
      ]

      \addplot [blue] {6/(x - 5)} 
              node [above, pos=0.95, font=\footnotesize] {\(y=\dfrac{6}{x-5}\)};
      \addplot [latex-latex] {x} 
              node[anchor=west, pos=1, font=\footnotesize]{\(y=x\)};
      \draw [dashed, latex-latex] 
            (5,\pgfkeysvalueof{/pgfplots/ymin}) -- (5, \pgfkeysvalueof{/pgfplots/ymax})
            node [pos=0.05, below, sloped, font=\footnotesize] {\(x=5\)};

      \fill [blue] (-1, -1) circle [radius=2pt]
                  node [anchor=north, font=\footnotesize] {\((-1, -1)\)};
      \fill [blue] (6, 6) circle [radius=2pt]
                node [anchor=west, font=\footnotesize] {\((6, 6)\)};
    \end{axis}
  \end{tikzpicture}
\end{center}

Ausgabe

Zusätzliche Hinweise

Erstens habe ich mir die Freiheit genommen, Ihr Beispiel zu bereinigen und Umgebungen wie zu verwenden enumerate, descriptionund eine Umgebung erstellt solution, die die Formatierung automatisch für Sie übernimmt. Obwohl \texbf{1) }und \vskip1emfunktionieren, ist es nicht wirklich die beste Art, LaTeX zu verwenden. Sie sollten schreiben, was Siebedeutenanstatt zu schreiben, was Sie wollensehen\textbf{1) }. Das bedeutet, dass anstelle von \textbf{2) }eine Aufzählungsliste und anstelle von \textbf{Solution: } ... \rule{1.5ex}{1.5ex}eine {solution}Umgebung vorhanden ist.

Der Vorteil, wenn Sie schreiben, was Siebedeutenist, dass Sie, wenn Sie das Aussehen von Lösungen ändern möchten, dies an einer Stelle tun können, statt das gesamte Dokument durchgehen und jede Instanz ändern zu müssen.

Noch ein paar Kleinigkeiten:

  • Aus irgendeinem Grund {axis}scheint die Umgebung mindestens einen \addplotBefehl zu erfordern. Ich vermute, dass dies daran liegt, dass der Befehl benötigt wird, um den Bereich beider Achsen zu berechnen, selbst wenn xminund xmax, yminangegeben ymaxsind. Da ich für die Zahlenlinie eigentlich nichts zeichnen möchte, habe ich verwendet \addplot [draw=none] {0};. Ich kann in der PGFplots-Dokumentation keine Erwähnung dieser Anforderung finden.
  • Wenn PGFplots die Positionierung aller Beschriftungen berechnet, scheint eine Mindesthöhe erforderlich zu sein. Beim Zeichnen der Zahlenlinie habe ich zunächst verwendet height=0pt, was jedoch zu Fehlern führte, sodass ich stattdessen verwendet habe height=11em. Dies hat den zusätzlichen Vorteil, dass ich die Koordinate nicht mehr anpassen muss plot1.south, da die vertikale Höhe der Grundlinie ausreicht.
  • Anstatt samplesund domainbei jedem \addplotAufruf zu deklarieren, deklariere ich diese Eigenschaften für die gesamte Achse. Dadurch wird der Code etwas übersichtlicher und es wird auch sichergestellt, dass alle Diagramme über die gesamte Domäne gezeichnet werden (ich möchte beispielsweise nicht, dass die Linie auf y=xhalbem Weg endet). Wenn dies jedoch das beabsichtigte Verhalten ist, \addplot [domain=-5:0] {x};überschreibt having das achsenweite domain.
  • Ähnlich wie beim vorherigen Hinweis funktioniert diese Änderung bei jedem Befehl in dieser Umgebung, wenn Sie restrict y to domaindie Optionen verwenden . Außerdem werden Punkte verworfen, die außerhalb der angegebenen Domäne liegen. Sie müssen nicht in zwei separaten Aufrufen plotten, da alle Werte, die außerhalb der angegebenen Domäne liegen,{axis}\addplotrestrict y to domain6 / (5-x)\addplotjDomäne werden automatisch verworfen.
  • Betrachten Sie im Hinblick auf die beiden vorherigen Punkte domainund restrict y to domainals Einstellungen für den Gesamtansichts-Port für das gesamte Diagramm. PGFplots ermittelt dann, was gezeichnet werden soll.
  • Ich verwende \pgfkeysvalueof{/pgfplots/xmin}(und analog), um den Wert von zu erhalten xmin, yminund ymaxanstatt sie fest zu codieren. Das bedeutet, dass, wenn ich ändern möchte, wo diej-Achse startet und stoppt, die Asymptotenlinie wird automatisch angepasst.
  • Anstatt \addplotzum Zeichnen der Linie zu verwenden x=5, verwende ich explizite Koordinaten. Dies liegt hauptsächlich daran, dass ich das Verhalten von PGFplots manchmal als etwas inkonsistent empfand.
  • Anstatt \addplot coordinates{-1,-1};einen einzelnen Punkt zu zeichnen, habe ich einen der grundlegenden Ti verwendetkZ-Befehle. Erstens zeichnen wir nicht wirklich eine weitere Kurve, sondern kommentieren sie, also \addplotfühlt es sich schon nicht so an, als ob wir das brauchen. Darüber hinaus \addplotbringt der zusätzliche Befehl die Legendeneinträge und den Plotstilzyklus durcheinander, weshalb Ihr anfänglicher Plot verschiedene Formen und Farben hatte, obwohl Sie sie nicht angegeben haben.
  • Ich habe gewählt width=\linewidth, damit der Plot die Breite der aktuellen Zeile ausfüllt. Was ist height=0.7\linewidth, ist willkürlich (ich hätte verwenden können height=5cm), aber der Grund für die Verwendung \linewidthist, dass, wenn ich die Formatierung des Dokuments ändere, das Seitenverhältnis der Plotbreite und -höhe gleich bleibt und immer garantiert ist, dass es die Breite der Zeile einnimmt. Was 0.7insbesondere das betrifft, verwende ich normalerweise, 0.62weil dies sicherstellt, dass der Plot dem folgtGoldener Schnitt, aber im speziellen Fall dieses Diagramms sah es meiner Meinung nach etwas zu gequetscht aus, also habe ich stattdessen verwendet 0.7.

verwandte Informationen