我想在 for 循环内绘制一个具有渐近行为的图形。由于 PGFplots 不太擅长绘制渐近线,我想手动帮助它一点。为此,我希望我的绘制命令使用与上一个图相同的颜色。这是一个 MWE:
\foreach \t in {1,2,5}{
\addplot+[cycle list name=puOr4,samples=2000, domain=0:6]
{((x>\t)*0 + ((x<\t)*1/(2*pi*sqrt((\t)^2-(\x)^2))}; %
\edef\temp{\noexpand\draw ({rel axis cs:0,0} -| {axis cs:\t,0}) -- ({rel axis cs:0,1} -| {axis cs:\t,0});}
\temp
\addlegendentryexpanded{$\tau=\t$};%
}
接受的答案将是:说服 PGFplots(以一种好的方式)绘制渐近线,或者允许我使用具有相同样式设置的绘制。
不接受是设置的肮脏伎俩samples=202,domain=0:\t*1.001
- 它在这个例子中工作得很好,但很肮脏而且并不总是适用。
答案1
感谢@percusse,具体操作如下:
\pgfplotsinvokeforeach{1.0,2.3,5.0}{
\addplot+[domain=(#1)*1.001:6.85]%
{((x>#1)*0 + ((x>#1)*1/(2*pi*sqrt((x)^2-(#1)^2))}%
(axis cs: #1,0) -- ({axis cs:#1,0} |- {rel axis cs:0,1}) ;%
\addlegendentry{$r=#1$};%
}
或者等价地
\foreach \r in {1.0,2.3, 5.0}{
\edef\temp{%
\noexpand\addplot+[domain=\r*1.001:6.85]%
{(\r>x)*0 + (\r<x)*(1/(2*pi*sqrt((x)^2-(\r)^2)))}%
(axis cs:\r,0) -- ({rel axis cs:0,1} -| {axis cs:\r,0});%
}
\temp
\addlegendentryexpanded{$r=\r$};%
}
(请注意,我根据问题切换了 tx 和 xr 的角色)。
为了理解为什么这样做有效:PGFplots foreach 相当于 TikZ 的多个变量,用斜线分隔