R - 如何使 CDF 图更平滑并标记 y 轴

  • 本文关键字:平滑 何使 CDF r ggplot2 ecdf
  • 更新时间 :
  • 英文 :


我从文件中读取参数"data1"和"data2",并使用此代码绘制cdf,但我有两个问题:

  1. 使图形更平滑
  2. 将 Y 轴标记为 CDF

请注意,此代码是正确的,但我需要进行一些修改。

df <- data.frame(x = c(data1, data2), ggg=factor(rep(1:2, c(19365,19365))))
ggplot(df, aes(x, colour = ggg)) + 
  stat_ecdf() + 
  labs(x='Time (ms)', ggg='CDF', fill='') + 
  theme_bw()+
  theme(panel.grid.major = element_line(colour = 'grey'),
        panel.border = element_rect(colour = 'black'),
        axis.line = element_blank(),
        panel.background = element_blank(),
        legend.direction='vertical',
        legend.position = c(1, 0.5),
        legend.justification = c(1, 0.5),
        legend.background = element_rect(colour = NA)) +
  scale_colour_hue(name='', labels=c('IEEE 802.11p','Our protocol'))

经验分布函数始终是一个阶跃函数,您不应以任何方式平滑它。话虽如此,您可以使用 ecdf 获取经验分布函数的值。如果要对结果进行任何平滑处理(不建议这样做),则可以。

require(dplyr)
res <- df %>% 
  group_by(ggg) %>%
  do(data.frame(x = sort(.$x), 
                ecdf = ecdf(.$x)(sort(.$x))))
ggplot(res, aes(x, ecdf, colour = ggg)) + geom_step()

要重新标记y轴,可以使用

labs(x='Time (ms)', y='CDF')