如何正确绘制直方图?

如何正确绘制直方图?

当然,这是一个简单的问题,但我找不到解决方案。假设您想要模拟围绕平均值且具有一定扩展度的频率的高斯分布。编写以下代码是一项简单的任务

\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[scale=1] 
\pgfmathsetseed{431}%
\pgfmathsetmacro{\mu}{0}
\pgfmathsetmacro{\sigma}{1}

\fill[red,opacity=.5,domain=-3:3,variable=\x,smooth] plot ({\x},{(10/sqrt(2*pi)*\sigma)*exp(-((\x-\mu)^2)/(2*\sigma^2))});

\foreach \k in {-3,-2.9,...,3}
{
\pgfmathsetmacro{\y}{(10/sqrt(2*pi)*\sigma)*exp(-((\k-     \mu)^2)/(2*\sigma^2))}
\draw[xshift=-1.5pt](\k,0)rectangle(\k+1/10,\y+rand/10);
}
\end{tikzpicture}
\end{document}

但是如果我们想用一条沿着顶部边框的连续线来绘制直方图,那么代码应该是什么呢?

答案1

如果我正确理解了您的问题,您可以使用 pgfplots 中的“const plot”来执行此操作。 (这里实际上不是直方图;它是一个分析阶跃函数。)

\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \pgfmathsetmacro{\mu}{0}
  \pgfmathsetmacro{\sigma}{1}
  \begin{axis}
    \addplot[samples=30,domain=-3:3,const plot] {1/(2*\sigma*sqrt(pi))*exp(-(x-\mu)^2/(2*\sigma^2))};
  \end{axis}
\end{tikzpicture}
\end{document}

得出结果

阶梯直方图

相关内容