Gnuplot CCDF绘图和对数对数刻度

时间:2015-07-23 22:03:03

标签: gnuplot cdf

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

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

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

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

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

set logscale x

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

另外,带有log-log scale(设置logscale xy)的CDF不能给我任何输出。如果我想要 log-log CCDF绘图

,该怎么办?

非常感谢!

1 个答案:

答案 0 :(得分: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(或标准化直方图,用于离散值)所需的所有数据。