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

如何利用日期时间变量创建带小时粒度的流行曲线(直方图)

食源性疾病流行曲线(按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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:21:05