指定跨越新年的日期轴的限制

问题描述 投票:1回答:1

我有这个数据集,正在与我一起每月进行绘图的地方总结。我在ggplot2中遇到的一个问题是让x轴从第10个月到第12个月,然后继续从第1个月到第4个月。在下面的示例中,我展示了这一点使用20年的数据集,其中我删除了5月到9月的几个月并绘制其余部分。

library(lubridate)
library(ggplot2)
mon=seq.Date(from=as.Date("2000-01-01"),to=as.Date("2019-12-01"),by="month")
val=rnorm(length(mon))
dd=data.frame(mon,val)
ddsub=subset(dd,month(mon)<5 |month(mon) >9)
ggplot(data=ddsub,aes(month(mon),val,group=month(mon))) + geom_boxplot() + 
      xlab("Month") + scale_x_continuous(breaks=c(1:12))

Monthly data with gap

我希望x轴从10月开始,并持续到今年4月底。由于month(ddsub$mon)返回的数值导致水平轴连续,因此我没有发现任何巧妙的方式来打破升序的数字顺序。

我唯一的解决方案是将月份定义为因子,然后以正确的方式对其进行重新排序

mon_factor=as.factor(month(ddsub$mon))
ddsub$mon_ahead=reorder(mon_factor,rep(c(4,5,6,7,1,2,3),20))
ggplot(data=ddsub,aes(mon_ahead,val)) + geom_boxplot() + xlab("Month")

enter image description here

虽然此方法有效,但我认为它不是一个优雅的解决方案。必须麻烦定义一个新的月份变量,然后对其重新排序。

有人知道是否可以直接使用Date对象并定义轴的限制,使其从十月开始到四月结束?

r datetime ggplot2
1个回答
1
投票

我认为在这里使用因子将是最简单的,您可以使用如下mo_FY之类的帮助器列自动进行排序。我喜欢forcats::fct_reorder的语法来建立顺序。

ddsub$mo_FY = (month(ddsub$mon) + 2) %% 12 + 1
ddsub$mon_fct = forcats::fct_reorder(factor(month(ddsub$mon)), ddsub$mo_FY)                 
ggplot(data=ddsub, aes(mon_fct, val)) + 
  geom_boxplot() + 
  xlab("Month") 

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.