在 pgf 中循环更改绘图的颜色和标签

在 pgf 中循环更改绘图的颜色和标签

我正在尝试绘制函数序列中的前几个函数。目前我的代码如下所示:


\begin{center}
\begin{tikzpicture}
    \begin{axis}[axis lines = left,
                    xlabel = $x$, 
                    ylabel = $y$,
                    xmin = 0,
                    xmax=10,
                    ymin=-0.1,
                    ymax = 0.4,
                    legend pos = outer north east];
            \addplot[domain=0:10, samples=100, color=gray, dashed]{sqrt(2)/2*exp(-pi/4)};
            \addlegendentry{$\sup_{x\in I}\card{f_n}$}
            \foreach \n in {1,2,...,7}{
\addplot [domain=0:10, samples=500, color=red]{sin(deg(\n*x))*exp(-\n*x)};
}
    \end{axis}
\end{tikzpicture}
\end{center}
\end{document}

但正如您在代码中看到的那样,每个图都是红色的。有没有办法让每个函数都用不同的颜色绘制,同时仍然用循环绘制它们?同样,我可以为每个函数添加一个图例条目,如 f_1(x)、f_2(x)、...、f_7(x) 循环?此处讨论了更改每个图的颜色在 \foreach 循环中更改 \addplot 的颜色(pgfplots)但我无法理解他们所做的工作,我实际上并不了解一切(即 \edef 或 \noexpand 或 \temp 的作用),而且我不一定需要颜色渐变,只要颜色不同,随机颜色也可以。我有一段时间没用过 pgfplots 了,我不太清楚该怎么做。任何帮助都非常感谢。

答案1

对于foreach循环,pgfplots您必须noexpand为每个表达式添加。使用该evaluate命令,您可以根据循环变量计算一个值。

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=newest}

\begin{document}
    
    \begin{tikzpicture}
        
        \begin{axis}[
            axis lines=left,
            xlabel=$x$, 
            ylabel=$y$,
            xmin=0,
            xmax=10,
            ymin=-0.1,
            ymax=0.4,
            legend pos=outer north east];
            
            \addplot[
            domain=0:10, 
            samples=100, 
            color=gray, 
            dashed,
            ]{sqrt(2)/2*exp(-pi/4)};
            
%           \addlegendentry{$\sup_{x\in I}\card{f_n}$} %<-causing some error 
            \foreach [evaluate=\i as \n using (\i)*100/(7)] \i in {1,2,...,7} {%
                \edef\temp{%
                    \noexpand
                        \addplot[
                        domain=0:10, 
                        samples=500,
                        color=red!\n!blue,
                        smooth,
                        ]
                        {sin(deg(\i*x))*exp(-\i*x)};
                    }\temp
                }       
        \end{axis}
    
    \end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容