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

如何在ggplot中隐藏年份轴刻度的"20"前缀并保留前导零?

问题描述

我使用2000-2017年的数据集绘制折线图时,X轴的年份刻度过于拥挤。希望隐藏X轴年份的"20"前缀,仅显示带前导零的后两位(例如00、01、02)。此前尝试通过year-2000生成新变量,但无法保留前导零,求可行解决方案。

原代码:

library(dplyr)
library(tidyr)
library(ggplot2)

df %>% 
  group_by(year) %>% 
  summarise(perc_fail = mean(fail),
         perc_attend = mean(attend)) %>% 
  ggplot(., aes(x = year, group=1)) +
  geom_line(aes(y= perc_fail, colour="Fail")) + 
  geom_line(aes(y=perc_attend, colour="Attend")) + 
  labs(y="Percent", 
       x="Year", 
       colour ="") + 
  scale_y_continuous(labels=~scales::percent(.x))
解决方案

无需生成新变量,直接通过ggplot2的scale_x_continuous自定义X轴刻度标签即可实现需求,核心是用格式化函数保留前导零:

library(dplyr)
library(ggplot2)

df %>% 
  group_by(year) %>% 
  summarise(perc_fail = mean(fail),
            perc_attend = mean(attend)) %>% 
  ggplot(aes(x = year, group=1)) +
  geom_line(aes(y= perc_fail, colour="Fail")) + 
  geom_line(aes(y=perc_attend, colour="Attend")) + 
  labs(y="Percent", 
       x="Year", 
       colour ="") + 
  scale_y_continuous(labels=~scales::percent(.x)) +
  # 自定义X轴刻度与标签
  scale_x_continuous(
    breaks = seq(2000, 2017, 1), # 按每年生成刻度,可根据需要调整间隔(如改为2则每2年显示一次)
    labels = function(x) sprintf("%02d", x - 2000) # 格式化年份为两位带前导零的数字
  )

关键说明

  • breaks参数:控制X轴刻度的显示位置,seq(2000,2017,1)表示从2000到2017年每年显示一个刻度,若觉得仍拥挤,可将最后一个参数改为2(每2年显示一次)。
  • labels参数:通过sprintf("%02d", x-2000)将年份减去2000后格式化为两位数字,自动为小于10的数字补前导零(例如2000→00,2005→05)。

替代方案(使用stringr包)

若习惯用stringr包,也可通过str_pad实现相同效果:

labels = function(x) stringr::str_pad(x - 2000, width = 2, side = "left", pad = "0")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:15:38