使用EpiCurve包绘制流感数据时X轴压缩问题咨询
X轴压缩的原因及解决办法
原因
EpiCurve包默认的X轴刻度逻辑在处理日级短跨度日期数据时,会自动仅保留首尾两个日期刻度,导致视觉上X轴被严重压缩,无法展示中间的时间节点。这个问题源于该包底层基础绘图的刻度优化逻辑对短周期日数据适配不佳,即便你的date变量是正确的Date类型也会出现。
解决办法
方法1:手动修改EpiCurve的X轴刻度
通过关闭默认轴,手动调用axis.Date()添加自定义间隔的刻度:
library(EpiCurve) library(outbreak) data <- influenza_england_1978_school # 绘制曲线但不显示默认轴 EpiCurve(x = data, date = "date", freq = "in_bed", period = "day", axes = FALSE) # 添加每7天一个刻度的X轴,标签垂直显示避免重叠 axis.Date(side = 1, at = seq(min(data$date), max(data$date), by = "7 days"), format = "%Y-%m-%d", las = 2) # 添加Y轴和框线 axis(side = 2) box()
你可以根据需求调整by参数(比如"3 days")来改变刻度密度。
方法2:改用ggplot2绘制(更灵活可控)
如果EpiCurve的默认行为难以满足需求,直接用ggplot2实现流行曲线,完全自定义X轴:
library(outbreak) library(ggplot2) data <- influenza_england_1978_school ggplot(data, aes(x = date, y = in_bed)) + geom_col(width = 1) + # 日数据适配的柱状宽度 scale_x_date(date_breaks = "7 days", date_labels = "%Y-%m-%d") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + # 标签倾斜避免重叠 labs(x = "日期", y = "卧床人数", title = "1978年英格兰学校流感流行曲线")
这种方式可以自由调整刻度间隔、标签样式,彻底解决X轴压缩问题。
内容的提问来源于stack exchange,提问作者shollaback
相关产品推荐
相关产品推荐

