我正在尝试使用 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
您可以使用pgfplotstable
PGFPlots 附带的包来计算累积百分比:
\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}