pgfplots:读取数据,计算图表

pgfplots:读取数据,计算图表

我正在尝试使用 pgfplots 创建图表。我有一些数据,我想将其存储在图表代码中,或者(最好不要)存储在单独的文件中。

我需要做的是计算数据的累积百分比。换句话说,每个数据点都是通过对前几行 y 列中的每个数字求和,然后除以 y 列中所有数字的总和,再乘以 100 来计算的。例如,数据点 3 的计算公式为 (0 + 435 + 111 + 51) / 646 * 100 = 92%。(646 是 y 列中所有数字的总和)

下面是数字和我想要根据它们创建的图表。

%x  y
0   0
1   435
2   111
3   51
4   23
5   10
6   5
7   5
8   3
9   3

想要的结果

提前非常感谢您!

答案1

您可以使用pgfplotstablePGFPlots 附带的包来计算累积百分比:

\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\usepackage{filecontents}

\begin{filecontents*}{data.dat}
x  y
0   0
1   435
2   111
3   51
4   23
5   10
6   5
7   5
8   3
9   3
\end{filecontents*}

\begin{document}

% Read the data table into a macro
\pgfplotstableread{data.dat}\datatable

% Calculate the sum of the y column
\pgfmathsetmacro\pgfplotstablesum{0}
\pgfplotstableforeachcolumnelement{y}\of\datatable\as\yvalue{
    \pgfmathsetmacro\pgfplotstablesum{\pgfplotstablesum+\yvalue}
}

% Define a "virtual column" that calculates the cumulative percentage on the fly
\pgfplotstableset{
    create on use/cumulative percentage/.style={
        create col/expr={\pgfmathaccuma + 100*\thisrow{y}/\pgfplotstablesum}
    }
}

\begin{tikzpicture}
\begin{axis}[
    enlargelimits=false,
    axis lines*=left
]
\addplot [black, thick, mark=*] table [y=cumulative percentage] {\datatable} node {};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容