我已根据maximum plot points in R?帖子的问题部分绘制了CCDF,以获得带有此代码的图(image1):
ccdf<-function(duration,density=FALSE)
{
freqs = table(duration)
X = rev(as.numeric(names(freqs)))
Y =cumsum(rev(as.list(freqs)));
data.frame(x=X,count=Y)
}
qplot(x,count,data=ccdf(duration),log='xy')
现在,根据teucer Howto Plot “Reverse” Cumulative Frequency Graph With ECDF的回答,我尝试使用以下命令绘制CCDF:
f <- ecdf(duration)
plot(1-f(duration),duration)
我有一个像image2的情节 另外,我从Plotting CDF of a dataset in R?中的一个答案的评论中读到,因为CCDF只不过是1-ECDF。 我对如何获取数据的CCDF感到困惑。
IMAGE1
图像2
答案 0 :(得分:3)
生成一些数据并找到ecdf函数。
x <- rlnorm(1e5, 5)
ecdf_x <- ecdf(x)
在x的范围内以固定间隔生成矢量。 (编辑:在这种情况下,您希望它们在对数刻度上均匀分布;如果您有负值,则在线性刻度上使用样本。)
xx <- seq(min(x), max(x), length.out = 1e4)
#or
log_x <- log(x)
xx <- exp(seq(min(log_x), max(log_x), length.out = 1e3))
使用x和y坐标为绘图创建数据。
dfr <- data.frame(
x = xx,
ecdf = ecdf_x(xx),
ccdf = 1 - ecdf_x(xx)
)
绘制情节。
p_ccdf <- ggplot(dfr, aes(x, ccdf)) +
geom_line() +
scale_x_log10()
p_ccdf
(另请查看aes(x, ecdf)
。)
答案 1 :(得分:1)
我使用ggplot来获取我的数据所需的ccdf图,如下所示:
>>ecdf_x <- ecdf(x)
>>dfr <- data.frame( ecdf = ecdf_x(x),
>>ccdf = 1 - ecdf_x(x) )
>>p_ccdf <- ggplot(dfr, aes(x, ccdf)) + geom_line() + scale_x_log10()
>>p_ccdf
很抱歉发布这么晚了。 谢谢大家!