有没有办法使用 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}