tikz 中的累积图

tikz 中的累积图

我正在尝试使用 绘制累积二项分布函数tikz。我已经创建了一个二项分布函数图,如下面的代码和图所示,但我需要该值在每次迭代时y都增加前一个值。y\j

下面的代码中有一行注释;我以为这会实现我想要的功能,但是它不起作用。

我知道我可以使用坐标列表来做我想做的事情,但我想要可以轻松调整的代码,因为最终我想要该参数的几个不同值\n(最多\n=100)。

提前致谢。

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}

\begin{document}

\begin{tikzpicture}[
declare function={binom(\j,\n,\p)=\n!/(\j!*(\n-\j)!)*\p^\j*(1-\p)^(\n-\j);} ] 
\pgfmathsetmacro{\n}{10};
\pgfmathsetmacro{\p}{0.5};
\pgfmathsetmacro{\yup}{0};
\begin{axis}[  xlabel=state $j$, ylabel=cumul. dist. $F_{B(10,1/2)}$
  ,axis x line=middle
  ,axis y line=left
  ,xlabel near ticks
  ,domain=0:\n
  ];       
\foreach \j in {0,...,\n} {
\addplot [color=red,domain=(\j-0.5):(\j+0.6)] {\yup+binom(floor(x+0.5),\n,\p)};
\pgfmathsetmacro{\yup}{0};
%\pgfmathsetmacro{\yup}{binom(\j,\n,\p)};
}
\end{axis}
\end{tikzpicture}

\end{document}

答案1

您需要将其分配给\yup全局而不是本地。 \pgfmathsetmarco不这样做。您必须使用\pgfmathparse\xdef\yup{\pgfmathresult}来实现这一点。

示例输出

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}

\begin{document}

\begin{tikzpicture}[
declare function={binom(\j,\n,\p)=\n!/(\j!*(\n-\j)!)*\p^\j*(1-\p)^(\n-\j);} ] 
\pgfmathsetmacro{\n}{3};
\pgfmathsetmacro{\p}{0.5};
\pgfmathsetmacro{\yup}{0};
\begin{axis}[  xlabel=state $j$, ylabel=cumul. dist. $F_{B(10,1/2)}$
  ,axis x line=middle
  ,axis y line=left
  ,xlabel near ticks
  ,domain=0:\n
  ];       
\foreach \j in {0,...,\n} {
\addplot [color=red,domain=(\j-0.5):(\j+0.5)] {\yup+binom(floor(x+0.5),\n,\p)};
\pgfmathparse{\yup+binom(\j,\n,\p)}
\xdef\yup{\pgfmathresult}
}
\end{axis}
\end{tikzpicture}

\end{document}

然而你会发现\n快速增加会导致溢出。

相关内容