pgfplots 中的直方图:计算数据值的总数

pgfplots 中的直方图:计算数据值的总数

我想用 pgfplots 制作一个直方图,在 y 轴上显示百分比而不是落入箱中的点数,如下所示(示例取自手册):

\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{statistics}

\usepackage{filecontents}
\begin{filecontents*}{histdata.dat}
  1
  2
  1
  5
  4
  10
  7
  10
  9
  8
  9
  9
\end{filecontents*}

\begin{document}
\begin{tikzpicture}[]
  \begin{axis}[
    ybar interval,
    xticklabel={\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick},
    yticklabel={\pgfmathparse{(\tick/12)*100}\pgfmathprintnumber{\pgfmathresult}\%},
    yticklabel style={
      /pgf/number format/.cd,
      fixed, precision=0,
      /tikz/.cd
    },
    ]
    \addplot+ [hist={bins=3}]
    table [y index=0] {histdata.dat};
  \end{axis}
\end{tikzpicture}
\end{document}

但是,只有知道数据值总数(在本例中为 12)才可以计算百分比。

在 pgfplots 或 (lua)latex 中是否有一种方法可以计算数据值的数量,即数据文件中的行数?

答案1

pgfplotstable有一个宏:

\pgfplotstablegetrowsof{histdata.dat}
\edef\NRows{\pgfplotsretval} % save result to \NRows

完整示例:

\documentclass[11pt]{scrartcl}
\usepackage{pgfplotstable} % loads pgfplots which loads tikz
\usepgfplotslibrary{statistics}

\usepackage{filecontents}
\begin{filecontents*}{histdata.dat}
  1
  2
  1
  5
  4
  10
  7
  10
  9
  8
  9
  9
\end{filecontents*}

\pgfplotstablegetrowsof{histdata.dat}
\edef\NRows{\pgfplotsretval}
\begin{document}



\begin{tikzpicture}[]
  \begin{axis}[
    ybar interval,
    xticklabel={\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick},
    yticklabel={\pgfmathparse{(\tick/\NRows)*100}\pgfmathprintnumber{\pgfmathresult}\%},
    yticklabel style={
      /pgf/number format/.cd,
      fixed, precision=0,
      /tikz/.cd
    },
    ]
    \addplot+ [hist={bins=3}]
    table [y index=0] {histdata.dat};
  \end{axis}
\end{tikzpicture}

\end{document}

相关内容