Mostrar un gráfico de pgfplots encima de otro gráfico de pgfplots en TikZ

Mostrar un gráfico de pgfplots encima de otro gráfico de pgfplots en TikZ

Tengo dos soluciones gráficas para una desigualdad (y una solución algebraica). Una solución se mostrará en la recta numérica y la otra solución se mostrará en el plano cartesiano. Quiero que la recta numérica y el eje x en el plano cartesiano estén alineados verticalmente.

La desigualdad es

\begin{ecuación*} \frac{6}{x - 5} \geq x \end{ecuación*}

y el conjunto de soluciones es $(-\infty,-1) \cup (5,6]$. Entonces, en el primer gráfico, quiero marcas y etiquetas para -1, 5y 6una línea gruesa dibujada a la izquierda de -1y entre 5y 6. Con TikZ, utilicé los siguientes comandos.

\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)$);

No estoy seguro de cuáles pgfplotsserían los comandos apropiados.

El código de la recta numérica no se compilaba. Puse líneas de comentarios delante de la mayoría de los comandos de la recta numérica.

Por cierto, me gustaría que los puntos (-1,-1)estuvieran (6,6)marcados con un círculo negro o un círculo azul. ¿Por qué el punto está (-1,-1)marcado con un diamante azul y el punto (6,6)marcado con un círculo rojo?

\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}

Respuesta1

PGFplots le permite utilizar todas las funciones habituales de TikZ dentro de su {axis}entorno. Tienes acceso al sistema de coordenadas a través axis csde lo que \node at (axis cs: 3, 4) {};coloca un nodo en elX-ycoordinar (3, 4). En la versión 1.11, axis csse convirtió en el sistema de coordenadas predeterminado utilizado por TikZ dentro de los {axis}entornos, por lo que no es necesario especificarlo axis cscada vez y, en su lugar, simplemente puede escribir \node at (3, 4) {};.

A continuación proporciono dos formas muy similares de dibujar (lo que creo) que deseas. Ambos trazan las dos curvas relevantes ( xy 6 / (5 - x)), pero el primero también usa laX-eje como la recta numérica mientras que el segundo coloca la recta numérica encima de la gráfica.

Versión 1: Todo en uno

Esta solución utiliza un conjunto de ejes para mostrar las ecuaciones apropiadas para la desigualdad y etiquetar la parte de la recta numérica para la cual la desigualdad es verdadera:

\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}

producción

Versión 2: recta numérica en la parte superior

Si desea tener la recta numérica separada del eje (como pretendía en la pregunta original), básicamente lo tenía todo bien:

\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}

producción

Notas adicionales

En primer lugar, me tomé la libertad de limpiar su ejemplo y utilizar entornos como enumeratey descriptioncreé un solutionentorno para encargarse del formato automáticamente. Aunque funciona \texbf{1) }y \vskip1emfunciona, en realidad no es la mejor manera de usar LaTeX. Deberías escribir lo quesignificaren lugar de escribir lo que quieresver. Es decir, en lugar de \textbf{1) }, \textbf{2) }tener una lista enumerada; y en lugar de eso \textbf{Solution: } ... \rule{1.5ex}{1.5ex}, tener un {solution}ambiente.

La ventaja de escribir lo quesignificares que si desea cambiar la apariencia de las soluciones, puede hacerlo en un solo lugar en lugar de tener que revisar todo el documento y cambiar cada instancia.

Algunas otras pequeñas cosas:

  • Por alguna razón, el {axis}entorno parece requerir tener al menos un \addplotcomando. Sospecho que es porque necesita eso para calcular el rango de ambos ejes incluso si xminy xmax, yminestán ymaxtodos especificados. Como no quiero trazar nada para la recta numérica, utilicé \addplot [draw=none] {0};. Parece que no puedo encontrar ninguna mención de este requisito en la documentación de PGFplots.
  • Cuando PGFplots calcula la posición de todas las etiquetas, parece requerir una altura mínima. Al dibujar la recta numérica, inicialmente usé height=0pt, pero esto resultó en errores, por lo que usé height=11em. Esto tiene el beneficio adicional de que ya no necesito ajustar las plot1.southcoordenadas ya que la altura vertical de la línea base es suficiente.
  • En lugar de declarar samplesy domaincon cada \addplotllamada, declaro estas propiedades para todo el eje. Esto hace que el código sea un poco más limpio y también garantiza que todos los gráficos se dibujen en todo el dominio (por ejemplo, prefiero que la línea no y=xse detenga a la mitad). Sin embargo, si ese es el comportamiento previsto, \addplot [domain=-5:0] {x};anulará el ancho del eje domain.
  • Similar a la nota anterior, tener restrict y to domainen las {axis}opciones hace que ese cambio funcione para cada \addplotcomando en ese entorno. Además, restrict y to domaindescarta puntos que están fuera del dominio especificado. No es necesario trazar 6 / (5-x)en dos \addplotllamadas separadas porque cualquier valor que termine fuera del especificadoydominio se descartan automáticamente.
  • Con respecto a los dos puntos anteriores, piense en domainy restrict y to domaincomo configuración el puerto de visualización general para todo el gráfico, y PGFplots descubrirá qué dibujar.
  • Utilizo \pgfkeysvalueof{/pgfplots/xmin}(y análogo) para obtener el valor de xminy yminen ymaxlugar de codificarlos. Esto significa que si quiero cambiar donde estáy-eje comienza y se detiene, la línea asíntota se ajustará automáticamente.
  • En lugar de usar \addplotpara dibujar la línea x=5, uso coordenadas explícitas. Esto se debe principalmente a que a veces encontré que el comportamiento de PGFplots es ligeramente inconsistente.
  • En lugar de usar \addplot coordinates{-1,-1};para dibujar un solo punto, usé uno de los Ti básicoskComandos Z. En primer lugar, en realidad no estamos trazando otra curva, sino que la estamos anotando, por lo que \addplotya no parece lo que necesitamos. Además, tener el \addplotcomando adicional alterará las entradas de la leyenda y el ciclo de estilo de trazado, de ahí que su trazado inicial tuviera varias formas y colores a pesar de no especificarlos.
  • Elegí width=\linewidthque la trama ocupara el ancho de la línea actual. En cuanto a height=0.7\linewidth, es arbitrario (podría haber usado height=5cm), pero la razón para usarlo \linewidthes que si cambio el formato del documento, la relación de aspecto del ancho y alto del trazado sigue siendo la misma y siempre se garantiza que ocupará el ancho. de la línea. En cuanto a 0.7en particular, normalmente lo uso 0.62porque garantiza que la trama siga elproporción áurea, pero en el caso particular de este gráfico pensé que se veía demasiado aplastado, así que usé 0.7.

información relacionada