如何在R中按周绘制病例数(以周起始日期为X轴)
解决每周病例数柱状图(X轴为周起始日期)问题
你当前的核心问题有两个:
- 日期解析错误:你的
Date.of.admission是日/月/年格式,用ymd()会解析失败,需改用dmy(); - 直方图不适合分组计数场景:
geom_histogram用于展示连续数据分布,而你需要先按周聚合病例数,再用柱状图呈现。
完整解决方案代码
library(dplyr) library(lubridate) library(ggplot2) # 1. 正确转换日期格式,过滤空值 df1 <- df1 %>% mutate(Date.of.admission = lubridate::dmy(Date.of.admission)) %>% filter(!is.na(Date.of.admission)) # 2. 按周起始日期分组统计病例数 # week_start=1 设周一为周起始(默认是周日,可按需调整) weekly_cases <- df1 %>% mutate(week_start = floor_date(Date.of.admission, unit = "week", week_start = 1)) %>% group_by(week_start) %>% summarise(case_count = n()) %>% ungroup() # 3. 设置时间范围 start_date <- ymd("2023-12-11") end_date <- ymd("2025-03-31") # 4. 绘制每周病例数柱状图 ggplot(weekly_cases, aes(x = week_start, y = case_count)) + geom_col(color = "black", fill = "black") + labs(x = "周起始日期", y = "每周病例数") + theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) + scale_x_date( labels = date_format("%d %b %y"), date_breaks = "2 weeks", # 按两周显示标签,避免拥挤 limits = c(start_date, end_date) )
关键细节说明
dmy():适配你的日/月/年日期格式,确保日期解析准确;floor_date(..., unit = "week"):将每个入院日期映射到对应周的起始日期,week_start=1可将周起始从默认周日改为周一;group_by() + summarise(n()):完成每周病例数的聚合统计;geom_col():用于展示预统计的离散计数,比geom_histogram更匹配你的需求;date_breaks="2 weeks":根据数据密度调整X轴标签间隔,避免标签重叠。
内容的提问来源于stack exchange,提问作者Anna Le Souef
相关产品推荐
相关产品推荐

