我找到了解决此问题的方法,因为我认为您不能仅使用 gnuplot 绘制 CCDF。
简而言之,我只是使用 bash 解析我的数据来创建一个累积数据是显式的数据集;然后 gnuplot 可以简单地绘制新数据集。例如,假设您的文件包含要累积的(数字)值,我会在 bash 环境中执行以下操作:
cat data | sort -n | uniq --count | awk 'BEGIN{sum=0}{print $2,$1,sum; sum=sum+$1}' > parsed.dat'
该命令读取数据集 ( cat data
),使用数值对数值数据进行排序 ( sort -n
),计算每个样本的出现次数 ( uniq --count
) 并创建一个新数据集,同时计算每个数据值的累积总和(awk 命令)。
这个新数据集包含 3 列:第一列(gnuplot 中的 $1)包含数据集的唯一值,$2 包含值出现的次数,第三列表示累积总和。
最后,在 gnuplot 中,您可以这样做:
stats "parsed.dat" using 3;
plot "parsed.dat" using 1:($3/STATS_max) with lines title "CDF",\
"" using 1:(1-$3/STATS_max) with lines title "CCDF",\
"" using 1:($2/STATS_max) with boxes title "PDF"
gnuplot 的 stats 命令分析第三列(具有累积和的那一列)并将值存储到一些变量中。STATS_max 是该列的最大值(因此它是最终的累积和)。现在,您拥有了绘制 CDF、CCDF(即 1 - CDF)和 PDF(或标准化直方图,用于离散值)所需的所有数据。