ggplot中年季度类型x轴如何设置刻度为2020-Q1格式?
实现方法
有两种常用的实现思路,都可以快速达到你要的显示效果:
方法1:使用zoo包配套的坐标轴缩放函数(推荐)
因为你的x轴数据本身就是yearqtr类型,直接调用zoo包自带的scale_x_yearqtr函数适配即可,不需要额外转换数据:
library(ggplot2) library(zoo) # 原有数据集构造代码 Dat = rbind( data.frame('name' = 'A', 'val' = sample(1:100, 10, replace = T), 'date' = as.yearqtr(seq(as.Date('2020-01-01'), by = '1 quarter', length.out = 10))), data.frame('name' = 'B', 'val' = sample(1:100, 10, replace = T), 'date' = as.yearqtr(seq(as.Date('2020-01-01'), by = '1 quarter', length.out = 10))), data.frame('name' = 'C', 'val' = sample(1:100, 10, replace = T), 'date' = as.yearqtr(seq(as.Date('2020-01-01'), by = '1 quarter', length.out = 10))) ) # 绘图代码,以分组柱状图为例,可替换为你需要的几何图层 ggplot(Dat, aes(x = date, y = val, fill = name)) + geom_col(position = "dodge") + # 核心配置:指定x轴刻度格式 scale_x_yearqtr(format = "%Y-Q%q", n = 10)
参数说明:
format = "%Y-Q%q":%Y代表4位年份,%q代表季度数值,组合后就是你需要的2020-Q1格式n参数控制显示的刻度总数,你也可以通过breaks参数手动指定刻度范围和间隔,比如breaks = seq(as.yearqtr("2020 Q1"), as.yearqtr("2022 Q2"), by = 0.25)可以自定义显示的刻度范围,其中by = 0.25代表每季度显示一次,by = 0.5代表每半年显示一次。
方法2:手动格式化标签自定义转换
yearqtr类型本质是数值型,整数部分为年份,小数部分为季度占全年的比例(Q1对应0,Q2对应0.25,Q3对应0.5,Q4对应0.75),你也可以通过自定义标签函数实现格式转换:
ggplot(Dat, aes(x = date, y = val, fill = name)) + geom_col(position = "dodge") + scale_x_continuous( labels = function(x) { paste0(floor(x), "-Q", round((x - floor(x)) * 4 + 1) } )
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

