R语言ggplot绘制季度数据自定义x轴刻度的实现方法
ggplot2 季度时间轴自定义刻度实现方法
核心修改逻辑
你当前使用的scale_x_yearqtr(来自zoo包)支持直接通过breaks参数手动指定需要展示的刻度位置,不需要额外复杂的断点计算,只需要提前把你要展示的刻度点转为yearqtr格式传入即可。
具体操作步骤
- 构造目标刻度向量
你需要展示的2005.Q1、2008.Q1等固定刻度,直接用as.yearqtr转换为对应时间类型即可:
# 手动指定需要显示的x轴刻度 x_breaks <- as.yearqtr( c("2005 Q1", "2008 Q1", "2011 Q1", "2014 Q1", "2017 Q1"), format = "%Y Q%q" )
如果后续需要自动生成间隔3年的Q1刻度、不想手动逐个输入,可以用序列生成函数自动计算:
# 自动生成间隔3年的第一季度刻度 x_breaks <- seq( from = as.yearqtr("2005 Q1"), to = as.yearqtr("2017 Q1"), by = 3 # 注意:yearqtr类型的时间单位为年,3即代表间隔3年 )
- 修改原有绘图代码的刻度配置
你原有代码其他部分完全不需要改动,只需要在scale_x_yearqtr中传入刚才生成的x_breaks到breaks参数即可,修改后的完整绘图代码如下:
library(zoo) library(ggplot2) plot = ggplot(df, aes(x = yq, y = rate, color = "red")) + geom_point() + geom_line(aes(y = lin, color = "green"), size = 1) + geom_line(aes(y = quad, color = "brown"), size = 1) + geom_line(aes(y = cube, color = "blue"), size = 1) + geom_line(aes(y = log, color = "pink"), size = 1) + geom_line(aes(y = power_corr, color = "black"), size = 1) + geom_line(aes(y = exp_corr, color = "yellow"), size = 1) + scale_color_identity( name = "Models", breaks = c("red", "green", "brown", "blue", "pink", "black", "yellow"), labels = c("Observed", "Linear", "Quadratic", "Cubic", "Log", "Power", "Exponential"), guide = "legend" ) plot + theme( panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black") ) + theme( axis.text.x = element_text(size = 8, angle=-45, hjust = 0.001), legend.key = element_rect(color = NA, fill = NA) ) + labs(title="", x = "Year/quarters", y = "Smoking prevalence") + # 仅修改这一行,传入自定义breaks scale_x_yearqtr(breaks = x_breaks, format='%Y.Q%q')
注意事项
- 不要把
scale_x_yearqtr的by参数单位和季度混淆,该函数时间基准单位为年,间隔3年直接设置by=3即可,不需要按季度数换算为12 - 如果刻度显示不全,检查你生成的
x_breaks向量是否覆盖了数据集中yq变量的时间范围,超出范围的刻度不会被展示。
内容的提问来源于stack exchange,提问作者Francesca
相关产品推荐
相关产品推荐

