该图上有 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}
输出:
答案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}