使用相同的颜色进行绘图并在 for 循环中绘制

使用相同的颜色进行绘图并在 for 循环中绘制

我想在 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$};%
    }

TL:DR;目前它看起来像这样: 在此处输入图片描述

但我希望渐近线的样式与图形相同,如下所示: 在此处输入图片描述


接受的答案将是:说服 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 的多个变量,用斜线分隔

相关内容