绘制3函数

绘制3函数

我希望绘制这个在此处输入图片描述

该图上有 3 个函数

t=xr,r<0,x<0 x=r,r>1,x>1 (xr)/(1-r),0

我的问题是我希望将 (xr)/(1-r) 线停止在点 (1,1) 处,如下图所示。有人能帮我吗?

目前有这个,也在努力画垂直线。

\documentclass[border=2mm]{standalone}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            xmin=-1, xmax=1.5,
            ymin=0, ymax=1.5,
            axis lines=center,
            axis on top=true,
            domain=-2:3,
        ]
            \addplot [mark=none,draw=red,ultra thick] {x+1};
            \addplot [mark=none,draw=red,ultra thick] {x+2};
            \addplot [mark=none,draw=red,ultra thick] {x+1.5};
            \addplot [mark=none,draw=red,ultra thick] {x};
            \addplot [mark=none,draw=red,ultra thick] {x+0.5};
            \addplot [mark=none,draw=green,ultra thick] {(x-.5)/(1-.5)};
        \end{axis}
    \end{tikzpicture}
\end{document}

答案1

您必须将domain其作为选项添加到addplot。您可以使用宏简单地绘制垂直线draw。通过axis cs在坐标中添加前缀,您可以使用轴坐标系。

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
    xmin=-1, xmax=1.5,
    ymin=0, ymax=1.5,
    axis lines=center,
    axis on top=true,
    ]
    \addplot [mark=none,draw=red,ultra thick] {x+1};
    \addplot [mark=none,draw=red,ultra thick] {x+2};
    \addplot [mark=none,draw=red,ultra thick] {x+1.5};
    \addplot [mark=none,draw=red,ultra thick] {x};
    \addplot [mark=none,draw=red,ultra thick] {x+0.5};
    \addplot [mark=none,draw=green,ultra thick, domain={0:1}] {(x-.5)/(1-.5)};
    \draw[draw=blue, ultra thick] (axis cs:1,0) -- (axis cs:1,1.5);
    \draw[draw=blue, ultra thick] (axis cs:1.5,0) -- (axis cs:1.5,1.5);
    \end{axis}
\end{tikzpicture}
\end{document}

输出:

pgf图

答案2

这是另一个解决方案(哇,他们来得真快!)

为了避免重复,我习惯于\foreach循环遍历值;但是,由于事物的扩展和解析方式,在某些情况下需要一些技巧。本质上,\tmp会创建一个临时宏,以便它包含(在第一次迭代的情况下):

\tmp = \addplot [green] (0.25, 0) -- (1, 1);

为了保持\i原样0.25\addplot使用\edef了 ,它会扩展定义中遇到的所有宏。但为了防止\addplot被扩展,\noexpand在前面添加了 ,并\tmp变为如上定义。

我还让红线停在x=1,但您可以通过删除 轻松更改这一点domain=-1:1

最后,我使用\pgfkeysvalueof{/pgfplots/ymax}来获取的值,ymax以保证垂直线到达图的顶部。

\documentclass[tikz]{standalone}

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

\begin{document}
\begin{tikzpicture}
  \begin{axis}[ 
      xmin=-1,
      xmax=1.5,
      ymin=0,
      ymax=1.5,
      axis lines=center,
      axis on top=true,
      domain=-2:3,
    ]

    \foreach \i in {0, 0.25, ..., 2} {
      \addplot [red, domain=-1:1] {x + \i};
    }
    \foreach \i in {0.25, 0.50, 0.76} {
      \edef\tmp{
        \noexpand\draw [green] (\i, 0) -- (1, 1);
      }
      \tmp
    }
    \foreach \i in {1.00, 1.25, 1.50} {
      \edef\tmp{
        \noexpand\draw [blue] (\i, 0) -- (\i, \pgfkeysvalueof{/pgfplots/ymax});
      }
      \tmp
    }
  \end{axis}
\end{tikzpicture}
\end{document}

输出

答案3

可以通过添加来单独设置此特定行的域,例如domain=.5:1

\documentclass [10pt] {article}
\usepackage{pgfplots}
 \pgfplotsset{compat=1.3}
\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
    xmin=-1, xmax=1.5,
    ymin=0, ymax=1.5,
    axis lines=center,
    axis on top=true,
    domain=-2:3,
    ]
    \addplot [mark=none,draw=red,ultra thick] {x+1};
    \addplot [mark=none,draw=red,ultra thick] {x+2};
    \addplot [mark=none,draw=red,ultra thick] {x+1.5};
    \addplot [mark=none,draw=red,ultra thick] {x};
    \addplot [mark=none,draw=red,ultra thick] {x+0.5};
    \addplot [mark=none,draw=green,ultra thick,domain=.5:1] {(x-.5)/(1-.5)};
    \draw[draw=blue, ultra thick] (axis cs:1,0) -- (axis cs:1,1.5);
    \draw[draw=blue, ultra thick] (axis cs:1.5,0) -- (axis cs:1.5,1.5);
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容