0

我的数据文件是一组排序的单列:

1
1
2
2
2
3
...
999
1000
1000

我能够使用以下命令成功绘制 CDF(假设文件中有 10000 行):

plot "file" using 1:(1/10000.) smooth cumulative title "CDF"

我还可以通过以下方式绘制 x 轴的对数刻度:

set logscale x

我的问题是如何使用 Gnuplot 进行 CCDF 绘图?

此外,带有对数刻度(设置对数刻度 xy)的 CDF 不能给我任何输出。如果我想要一个log-log CCDF 绘图怎么办?

非常感谢!

4

1 回答 1

0

我找到了解决此问题的方法,因为我认为您不能仅使用 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(或标准化直方图,用于离散值)所需的所有数据。

于 2017-02-22T17:56:28.457 回答