如何在ggplot中修改X轴为年度变量并添加年度分隔竖线?
ggplot散点图:将X轴改为年份并添加年度分隔竖线
操作步骤
- 先计算每个年度最后一周的周数(
Obs值),确定年度切换位置,用于绘制分隔竖线。 - 调整X轴刻度,将年份设为标签,对应到每年第一周的周数位置。
- 优化颜色映射与标签显示,避免内容重叠。
修改后的代码
# 计算各年度最后一周的Obs值,用于绘制年度分隔线 year_breaks <- HS %>% group_by(YEAR) %>% summarise(last_week = max(Obs)) %>% pull(last_week) # 生成调整后的散点图 ggplot(HS, aes(x = as.integer(Obs), y = Total)) + geom_point(aes(color = factor(YEAR))) + # 将YEAR转为因子,按离散年份区分颜色 geom_smooth() + # 添加年度分隔竖线(灰色虚线) geom_vline(xintercept = year_breaks, color = "gray50", linetype = "dashed") + # 自定义X轴:用年份作为标签,对应每年第一周的位置 scale_x_continuous( breaks = HS %>% group_by(YEAR) %>% summarise(first_week = min(Obs)) %>% pull(first_week), labels = unique(HS$YEAR), name = "年份" ) + labs( title = "2017年以来周度销售额", y = "签约销售额" ) + theme( axis.line = element_line(colour = "orange", size = 1, linetype = "solid"), axis.text.x = element_text(angle = 45, hjust = 1) # 倾斜年份标签,避免重叠 )
关键调整说明
- 年度竖线:通过
geom_vline和计算出的year_breaks,在每个年度结束位置添加虚线,清晰划分不同年份的数据区间。 - X轴优化:用
scale_x_continuous指定刻度位置为每年第一周的Obs值,标签替换为对应年份,直接展示时间维度的年份信息。 - 颜色映射:将
YEAR转为因子类型,确保颜色按离散年份分配,比连续数值的颜色映射更直观。 - 标签防重叠:给X轴年份标签添加倾斜角度,避免多个年份挤在一起无法看清。
内容的提问来源于stack exchange,提问作者June Richardson
相关产品推荐
相关产品推荐

