You need to enable JavaScript to run this app. 如何在R语言ggplot2折线图中添加带年份标注的二级x轴
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言ggplot2折线图中添加带年份标注的二级x轴

实现方案
  • 可行性:完全可以通过annotate()函数实现需求,全程无需使用xlim参数扩展x轴范围。所有标注的x坐标均落在现有数据集覆盖的日期区间内,不需要额外预留轴外空间。
  • 核心实现逻辑:
    • 取每个年份组的首个数据点对应的日期作为标注的x坐标,匹配左对齐要求:
      • 2018年组:首点为2018-12-01
      • 2019年组:首点为2019-01-01
      • 2020年组:首点为2020-01-01
    • 将标注放置在月度x轴刻度的下方区域,设置水平无旋转、左对齐,匹配标注样式要求
    • 仅小幅调整y轴下限留出标注空间,完全不改动现有x轴的刻度范围
可直接运行的修改后代码
#数据生成
Month1 <- c(201812,20191,20192,20193,20194,20195,20196,
        20197,20198,20199,201910,201911,201912,20201
        ,20202,20203,20204,20205,20206,20207
        ,20208,20209,202010,202011)
Rate <- 
c(3.3,3.4,3.1,3.0,3.1,2.9,2.6,2.5,2.3,2.1,1.6,1.7,1.5,1.7,1.1,-0.4,
      -19.5,-17.6,-10.5,-9.6,-9.1,-8.6,-8.0,-7.7)
cesyoy <- data.frame(Month1,Rate)

#加载依赖包
library(ggplot2)
library(dplyr)
library(lubridate)
library(scales)
library(odbc)

## 绘制折线图
linechart <- cesyoy %>% 
  mutate(year = substr(as.character(Month1),1,4),
         month = substr(as.character(Month1),5,7),
         date = as.Date(paste(year,month,"1",sep ="-"))) %>%  
  ggplot()+
  geom_line(aes(x=date,y=Rate),color="red")+
  # 调整y轴范围,仅为下方年份标注留出空间,不改动x轴范围
  scale_y_continuous(labels = scales::percent, limits = c(-25, 4))+
  scale_x_date(date_breaks="1 month", date_labels="%b\n")+
  # 添加二级年份x轴标注
  annotate(
    geom = "text",
    x = c(ymd("2018-12-01"), ymd("2019-01-01"), ymd("2020-01-01")),
    y = -23,
    label = c("2018", "2019", "2020"),
    hjust = 0, # 左对齐
    angle = 0, # 水平显示
    size = 3
  )+
  theme(
    panel.grid.major = element_blank(),
    axis.text.x = element_text(angle = 90, size=rel(0.6)),
    plot.margin = margin(t = 20, r = 10, b = 40, l = 10) # 给底部标注留出边距,防止截断
  )+
  ggtitle("Employment Growth (%)")
print(linechart)

注意:这里设置的ylim仅用于给下方的年份标注预留垂直空间,全程没有修改x轴的显示范围,完全符合你不需要扩展x轴的要求。

内容的提问来源于stack exchange,提问作者Tim Wilcox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 12:27:03