Отображение графика pgfplots над другим графиком pgfplots в TikZ

Отображение графика pgfplots над другим графиком pgfplots в TikZ

У меня есть два графических решения неравенства (и одно алгебраическое решение). Одно решение должно быть отображено на числовой прямой, а другое — на декартовой плоскости. Я хочу, чтобы числовая прямая и ось x в декартовой плоскости были выровнены по вертикали.

Неравенство имеет вид

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

и набор решений — $(-\infty,-1) \cup (5,6]$. Итак, на первом графике я хочу сделать отметки и подписи для -1, 5, и 6и провести толстую линию слева от -1и между 5и 6. С помощью TikZя использовал следующие команды.

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

Я не уверен, какие команды здесь pgfplotsбудут уместны.

Код для числовой строки не компилировался. Я поместил строки комментариев перед большинством команд для числовой строки.

Кстати, я бы хотел, чтобы точки (-1,-1)и (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}

решение1

PGFplots позволяет использовать все обычные функции TiкZ в его {axis}окружении. У вас есть доступ к системе координат через axis csтак, что \node at (axis cs: 3, 4) {};размещает узел вИкс-уКоордината (3, 4). В версии 1.11 axis csстала системой координат по умолчанию, используемой TiкZ в {axis}средах, поэтому вам не нужно указывать его axis csкаждый раз, а вместо этого можно просто ввести \node at (3, 4) {};.

Ниже я привожу два очень похожих способа рисования (того, что я думаю) того, что вам нужно. Оба они рисуют две соответствующие кривые ( xи 6 / (5 - x)), но первый также используетИкс-ось как числовая прямая, тогда как второй вариант помещает числовую прямую над графиком.

Версия 1: Все в одном

В этом решении используется один набор осей как для отображения соответствующих уравнений неравенства, так и для обозначения части числовой прямой, для которой неравенство выполняется:

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

выход

Версия 2: Числовая прямая сверху

Если вы хотите, чтобы числовая прямая была отделена от оси (как вы намеревались сделать в исходном вопросе), то в принципе все правильно:

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

выход

Дополнительные примечания

Во-первых, я взял на себя смелость очистить ваш пример и использовать такие среды, как enumerate, descriptionи создал solutionсреду, которая автоматически позаботится о форматировании для вас. Хотя наличие \texbf{1) }и \vskip1emделает работу, это не лучший способ использовать LaTeX. Вы должны писать то, что выиметь в видувместо того, чтобы писать то, что вы хотитевидеть. То есть вместо \textbf{1) }, \textbf{2) }, иметь пронумерованный список; и вместо \textbf{Solution: } ... \rule{1.5ex}{1.5ex}, иметь {solution}среду.

Преимущество написания того, что выиметь в видузаключается в том, что если вы хотите изменить внешний вид решений, вы можете сделать это в одном месте, вместо того чтобы просматривать весь документ и изменять каждый экземпляр.

Еще несколько мелочей:

  • По какой-то причине {axis}среда, похоже, требует наличия хотя бы одной \addplotкоманды. Я подозреваю, что это потому, что она нужна для вычисления диапазона обеих осей, даже если указаны xmin, xmax, yminи . Поскольку я не хочу ничего строить для числовой прямой, я использовал . Я не могу найти никаких упоминаний об этом требовании в документации PGFplots.ymax\addplot [draw=none] {0};
  • Когда PGFplots вычисляет положение всех меток, кажется, требуется минимальная высота. При рисовании числовой прямой я изначально использовал height=0pt, но это привело к ошибкам, поэтому вместо этого я использовал height=11em. Это имеет дополнительное преимущество, так как мне больше не нужно настраивать координаты, plot1.southтак как вертикальной высоты базовой линии достаточно.
  • Вместо того, чтобы объявлять samplesи domainпри каждом \addplotвызове, я объявляю эти свойства для всей оси. Это делает код немного чище, а также гарантирует, что все графики будут нарисованы по всей области (например, я бы предпочел, чтобы линия не y=xостанавливалась на полпути). Однако, если это предполагаемое поведение, having \addplot [domain=-5:0] {x};переопределит axis-wide domain.
  • Подобно предыдущему примечанию, наличие restrict y to domainв {axis}параметрах делает это изменение работающим для каждой \addplotкоманды в этой среде. Кроме того, restrict y to domainотбрасывает точки, которые находятся за пределами указанного домена. Вам не нужно строить график 6 / (5-x)в двух отдельных \addplotвызовах, потому что любое значение, которое оказывается за пределами указанногоудомен автоматически отбрасывается.
  • Что касается двух предыдущих пунктов, думайте о domainи restrict y to domainкак о настройках общего окна просмотра для всего графика, а PGFplots затем сам разберется, что рисовать.
  • Я использую \pgfkeysvalueof{/pgfplots/xmin}(и аналогичный) для того, чтобы получить значение xmin, yminи ymaxвместо того, чтобы жестко кодировать их. Это означает, что если я хочу изменить, гдеу-ось запускается и останавливается, линия асимптоты автоматически корректируется.
  • Вместо того, чтобы использовать \addplotдля рисования линии x=5, я использую явные координаты. Это в основном потому, что я обнаружил, что поведение PGFplots иногда немного непоследовательно.
  • Вместо того, \addplot coordinates{-1,-1};чтобы рисовать одну точку, я использовал один из основных TiкКоманды Z. Во-первых, мы на самом деле не строим еще одну кривую, а вместо этого аннотируем ее, так что это \addplotуже не кажется тем, что нам нужно. Кроме того, наличие дополнительной \addplotкоманды будет мешать записям легенды и циклу стиля графика, поэтому ваш первоначальный график имел различные формы и цвета, хотя вы их не указывали.
  • Я выбрал width=\linewidthтак, чтобы график заполнял ширину текущей строки. Что касается height=0.7\linewidth, это произвольно (я мог бы использовать height=5cm), но обоснование использования \linewidthзаключается в том, что если я изменю форматирование документа, соотношение ширины и высоты графика останется прежним, и он всегда гарантированно займет ширину строки. Что касается 0.7в частности , я обычно использую , 0.62потому что это гарантирует, что график следуетЗолотое сечение, но в конкретном случае этого графика я посчитал, что он выглядит слишком сплющенным, поэтому вместо этого я использовал 0.7.

Связанный контент