如何在R语言的eCDF图中添加四分位数、均值与中位数
给eCDF图添加四分位数、均值和中位数
你当前绘制eCDF图的代码如下:
df %>% group_by(group1, group2) %>% summarise(n = length(unique(sessionID))) %>% ggplot(aes(n)) + stat_ecdf(geom = "step") + scale_x_continuous(n.breaks = 30) + theme_classic()
要在图中添加四分位数(Q1、Q3)、均值和中位数,可按以下步骤修改代码:
步骤1:提前计算所需统计量
先对分组后的数据计算关键统计指标,同时算出这些指标对应的ECDF累积概率(用于确定图上标注的y轴位置):
# 计算统计量和对应的ECDF值 stats_df <- df %>% group_by(group1, group2) %>% summarise( n = length(unique(sessionID)), .groups = "drop_last" ) %>% mutate( ecdf_val = ecdf(n)(n) ) %>% group_by(group1, group2) %>% summarise( q1 = quantile(n, 0.25), q3 = quantile(n, 0.75), median = median(n), mean = mean(n), # 对应统计量的ECDF累积概率值 q1_ecdf = ecdf(n)(q1), q3_ecdf = ecdf(n)(q3), median_ecdf = ecdf(n)(median), mean_ecdf = ecdf(n)(mean) )
步骤2:修改绘图代码,添加统计线和标注
在原ggplot代码基础上,用geom_vline添加垂直参考线标记统计量位置,用geom_text添加文本标注:
df %>% group_by(group1, group2) %>% summarise(n = length(unique(sessionID)), .groups = "drop") %>% ggplot(aes(n)) + stat_ecdf(geom = "step") + # 添加四分位数、中位数、均值的垂直参考线 geom_vline(data = stats_df, aes(xintercept = q1, color = "Q1"), linetype = "dashed") + geom_vline(data = stats_df, aes(xintercept = q3, color = "Q3"), linetype = "dashed") + geom_vline(data = stats_df, aes(xintercept = median, color = "中位数"), linetype = "solid") + geom_vline(data = stats_df, aes(xintercept = mean, color = "均值"), linetype = "dotdash") + # 添加统计量数值标注(可调整hjust/vjust适配你的图) geom_text(data = stats_df, aes(x = q1, y = q1_ecdf, label = paste0("Q1: ", round(q1, 1))), hjust = -0.1, vjust = 0.5, size = 3) + geom_text(data = stats_df, aes(x = q3, y = q3_ecdf, label = paste0("Q3: ", round(q3, 1))), hjust = -0.1, vjust = 0.5, size = 3) + geom_text(data = stats_df, aes(x = median, y = median_ecdf, label = paste0("中位数: ", round(median, 1))), hjust = -0.1, vjust = 0.5, size = 3) + geom_text(data = stats_df, aes(x = mean, y = mean_ecdf, label = paste0("均值: ", round(mean, 1))), hjust = -0.1, vjust = 0.5, size = 3) + scale_x_continuous(n.breaks = 30) + # 自定义线条颜色 scale_color_manual(values = c("Q1" = "blue", "Q3" = "blue", "中位数" = "red", "均值" = "green")) + labs(color = "统计量") + theme_classic() + theme(legend.position = "top")
代码说明
stats_df负责计算每个分组的核心统计量,以及这些统计量在ECDF曲线上对应的累积概率,确保标注位置贴合曲线- 不同统计量用不同颜色、线型的垂直参考线区分,便于识别
- 文本标注的位置可通过
hjust(水平对齐)和vjust(垂直对齐)调整,避免遮挡曲线或其他元素 - 通过
scale_color_manual自定义颜色,让统计量的视觉区分更清晰
内容的提问来源于stack exchange,提问作者user2845095
相关产品推荐
相关产品推荐

