Gnuplot CCDF绘图和对数-对数刻度



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

1
1
2
2
2
3
...
999
1000
1000
我能够使用下面的命令成功绘制CDF(假设文件中有10000行):
plot "file" using 1:(1/10000.) smooth cumulative title "CDF"

我还能够绘制x轴的logcale:

set logscale x

我的问题是我怎么能有一个CCDF与Gnuplot绘图?

另外,带有log-log标度的CDF (set logscale xy)不能给我任何输出。如果我想有一个log-log CCDF绘图怎么办?

多谢!

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

相关内容

  • 没有找到相关文章

最新更新