You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:35:25