使用函数循环生成 PGFPlots 图的坐标

使用函数循环生成 PGFPlots 图的坐标

有没有办法使用 pgfplots 中的函数循环生成一组坐标?到目前为止,我已经完成了手动输入值的方法,但这很快就会变得乏味,因为我想为同一函数绘制不同的参数图。

我尝试使用该\foreach函数,但它无法编译。实现此目的的最佳方法是什么?下面是我的代码,第一个带手动输入的函数绘图有效,第二个循环绘图无效。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{center}
\begin{tikzpicture}[declare function={f(\b,\vo,\v,\a)=ceil((\b*(\v-\vo))/\a)+1;}]
        \begin{axis}[
        xlabel=acceleration ($a_0$),
        ylabel=number of yellow bars($y$)
        ]
    %this works
    \addplot coordinates{
        (-0.5,{f(1,30,10,-0.5)})
        (-1,{f(1,30,10,-1)})
        (-1.5,{f(1,30,10,-1.5)})
        (-2,{f(1,30,10,-2)})
        (-2.5,{f(1,30,10,-2.5)})
        (-3,{f(1,30,10,-3)})
    };
    %this does not work
    \addplot coordinates{
        \foreach \acc in {-0.5,-1,-1.5,-2,-2.5,-3} {
            (\acc,{f(1,40,20,\acceler)})
        }
        };
    \end{axis}
\end{tikzpicture}
\end{center}
\end{document}

答案1

有了samples at它就可以工作了。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{center}
\begin{tikzpicture}[declare function={f(\b,\vo,\v,\a)=ceil((\b*(\v-\vo))/\a)+1;}]
        \begin{axis}[
        xlabel=acceleration ($a_0$),
        ylabel=number of yellow bars($y$)
        ]
    %this works
%     \addplot coordinates{
%         (-0.5,{f(1,30,10,-0.5)})
%         (-1,{f(1,30,10,-1)})
%         (-1.5,{f(1,30,10,-1.5)})
%         (-2,{f(1,30,10,-2)})
%         (-2.5,{f(1,30,10,-2.5)})
%         (-3,{f(1,30,10,-3)})
%     };
    %this also works
    \addplot[mark=*,color=blue,samples at={-0.5,-1,-1.5,-2,-2.5,-3}] {f(1,40,20,x)};
    \end{axis}
\end{tikzpicture}
\end{center}
\end{document}

在此处输入图片描述

相关内容