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

如何用ggplot绘制按性别分组的各年龄事件累计均值折线图

R实现按性别分组的年龄累计事件均值折线图

实现逻辑

  • 第一步:对每个个体,按年龄从小到大排序,计算截至每个年龄的事件累计发生数
  • 第二步:按性别、年龄分组,对同组所有个体的累计事件数取平均值,得到对应群体的累计均值
  • 第三步:以年龄为横轴、累计均值为纵轴,按性别分组绘制折线图

提示:如果你的原始数据存在缺失值,计算均值时可修改为mean(cum_event, na.rm = TRUE)自动过滤缺失值。

完整代码

你需要提前安装tidyverse包(包含数据处理用的dplyr和绘图用的ggplot2),运行以下代码即可:

# 加载依赖包
library(tidyverse)

# 示例数据
set.seed(123)
id <- rep(1:8, each = 5)
female <- c(rep(1,20), rep(0, 20))
age <- rep(20:24, 8)
dat <- data.frame(id, female, age)
dat$event <- sample(rep(c(1, 0), nrow(dat) / 2))

# 计算绘图所需的累计均值数据
plot_dat <- dat %>%
  # 按个体分组,计算单个体各年龄累计事件数
  group_by(id) %>%
  arrange(age, .by_group = TRUE) %>%
  mutate(cum_event = cumsum(event)) %>%
  ungroup() %>%
  # 按性别、年龄分组计算群体累计均值
  group_by(female, age) %>%
  summarise(cum_mean = mean(cum_event), .groups = "drop") %>%
  # 转换性别为带文字标签的因子,优化图例显示
  mutate(gender = factor(female, levels = c(0, 1), labels = c("男性", "女性")))

# 绘制折线图
ggplot(plot_dat, aes(x = age, y = cum_mean, color = gender, group = gender)) +
  # 绘制折线
  geom_line(linewidth = 1) +
  # 加数据点方便读取具体数值
  geom_point(size = 2) +
  # 设置x轴刻度为20-24整数
  scale_x_continuous(breaks = 20:24) +
  # 设置轴标签和图例标题
  labs(
    x = "年龄",
    y = "平均累计事件发生数",
    color = "性别"
  ) +
  # 用清晰的黑白主题
  theme_bw()

内容的提问来源于stack exchange,提问作者johnny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:54:05