如何绘制按分组填充颜色的单条ECDF(经验累积分布函数)曲线
解决方法
要实现将所有price数据合并为一条ECDF曲线,仅让点的填充颜色随cut分组变化,需要先手动计算整体数据的ECDF值,再将其与原始数据关联后绘图,避免stat_ecdf自动按分组计算独立ECDF。
具体步骤如下:
- 对抽样后的diamonds数据,计算所有price的排序及对应的累积概率(ECDF的y值)
- 用ggplot直接绘制点,x映射为price,y映射为手动计算的ECDF值,fill映射为cut
完整代码:
library(ggplot2) library(dplyr) diamonds %>% slice_sample(prop = 0.01) %>% mutate( # 计算所有price的秩,用average处理重复值保证ECDF准确性 rank = rank(price, ties.method = "average"), # 计算整体ECDF的累积概率值 ecdf_y = rank / n() ) %>% ggplot(aes(x = price, y = ecdf_y, fill = cut)) + geom_point(shape = 21) + labs(y = "ECDF")
代码说明
rank(price, ties.method = "average"):针对所有price计算秩,重复值取平均秩,避免重复数据导致ECDF出现跳变误差ecdf_y = rank / n():n()代表当前数据的总样本量,计算得到每个点对应的累积概率,这就是整体ECDF的y轴数值- 用
geom_point替代stat_ecdf,直接使用手动计算的ECDF值,彻底避免分组计算独立曲线的问题
最终绘制的点会按照整体price的ECDF规律排列,每个点的填充颜色由对应的cut分组决定,呈现一条统一的ECDF曲线。
内容的提问来源于stack exchange,提问作者tassones
相关产品推荐
相关产品推荐

