如何利用日期时间变量创建带小时粒度的流行曲线(直方图)
食源性疾病流行曲线(按2小时粒度)实现方案
问题背景
你需要构建按2小时粒度统计病例数的流行曲线,保留完整的日期时间信息,避免as.Date()截断时间导致的日粒度统计问题。你的模拟数据集包含《海底总动员》角色的症状发作时间,其中Dory的发作时间为NA,需要在绘图时过滤。
解决方案步骤
- 保留datetime类型:不要将
symptom_onset转换为Date类型,保留原始的dttm(POSIXct/POSIXlt)格式。 - 过滤缺失值:移除
symptom_onset为NA的记录(如Dory的数据),避免干扰统计。 - 设置2小时统计区间:在
geom_histogram中通过binwidth指定2小时的区间宽度(单位为秒,2小时=7200秒),或用breaks手动生成间隔。 - 优化X轴显示:使用
scale_x_datetime设置日期时间范围,并调整刻度格式,确保完整显示日期和小时。 - 修正文本标签:确保
geom_text的统计逻辑正确,显示每个区间的病例数。
完整代码实现
# 加载必要包 library(ggplot2) library(dplyr) # 模拟数据集(可替换为你的finding_nemo数据) finding_nemo <- tibble( first_name = c("Nemo", "Marlin", "Dory", "Bruce", "Nigel", "Peach", "Tad", "Crush", "Squirt", "Pearl", "Jacques"), last_name = c("Clownfish", "Clownfish", "Tang", "Shark", "Pelican", "Starfish", "Butterflyfish", "Turtle", "Turtle", "Octopus", "Shrimp"), symptom_onset = as.POSIXct(c("2023-05-20 01:23:11", "2023-05-19 16:03:22", NA, "2023-05-19 16:55:33", "2023-05-19 18:22:24", "2023-05-20 01:03:18", "2023-05-21 02:10:16", "2023-05-20 01:40:37", "2023-05-20 01:45:23", "2023-05-20 01:32:26", "2023-05-20 02:54:08")) ) # 过滤NA并绘制流行曲线 ggplot(data = filter(finding_nemo, !is.na(symptom_onset)), aes(x = symptom_onset)) + geom_histogram(fill = "#197C67", binwidth = 7200, color = "white") + # 7200秒=2小时 geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.5, size = 3.5) + labs( title = "EpiCurve for Sick Fish at Nemo's Picnic", x = "Symptom Onset (Date & Hour)", y = "Number of Cases" ) + scale_x_datetime( limits = as.POSIXct(c("2023-05-19 12:00:00", "2023-05-21 06:00:00")), date_labels = "%Y-%m-%d %H:%M", # 自定义日期时间显示格式 date_breaks = "2 hours" # 设置X轴刻度间隔为2小时 ) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转X轴标签避免重叠
代码说明
binwidth = 7200:直接指定每个直方图区间的宽度为2小时(7200秒),确保按2小时粒度统计病例数。filter(finding_nemo, !is.na(symptom_onset)):过滤掉无发作时间的记录,保证统计结果准确。scale_x_datetime:通过date_labels设置日期时间的显示格式,date_breaks强制X轴每2小时显示一个刻度,同时调整标签角度避免重叠。after_stat(count):使用ggplot2最新语法替代旧版的..count..,确保代码兼容性。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

