R 调整x轴日期以匹配“财政”年度的开始日期

R 调整x轴日期以匹配“财政”年度的开始日期,r,ggplot2,R,Ggplot2,有没有办法改变季节图的日期,使之与任意会计年度相匹配(例如,3月/2月而不是12月/1月) 我对far有这样的看法: startMonth = 3 # march startDate = as.Date(paste0(year(today()), '-', startMonth, '-1')) dts = seq.Date(from = today() - 500, to = today(), by = 'day') dat = data.frame(date = dts, value =

有没有办法改变季节图的日期,使之与任意会计年度相匹配(例如,3月/2月而不是12月/1月)

我对far有这样的看法:

startMonth = 3 # march
startDate = as.Date(paste0(year(today()), '-', startMonth, '-1'))


dts = seq.Date(from = today() - 500, to = today(), by = 'day')
dat = data.frame(date = dts, value = runif(n = length(dts), min = 1, max = 10))

dat$month = month(dat$date)
dat$year = year(dat$date)
dat$yearPlot = ifelse(test = dat$month < startMonth, yes = (dat$year - 1), no = dat$year)
dat$year = as.character(dat$year)

dat$ydaydiff = yday(dat$date) - yday(startDate)
dat$datePlot1 = ifelse(dat$ydaydiff < 0, dat$ydaydiff + 365, dat$ydaydiff)
dat$datePlot1 = as.Date('0001-01-01') + days(dat$datePlot1)

dat$yearPlot = as.character(dat$yearPlot)
ggplot(dat) +
  geom_path(aes(x = datePlot1, y = value, color = yearPlot)) +
  scale_x_date(date_labels = '%b', )
startMonth=3月
startDate=as.Date(粘贴0(年(今天()),“-”,startMonth,“-1”))
dts=seq.Date(from=today()-500,to=today(),by='day')
dat=data.frame(日期=dts,值=runif(n=长度(dts),最小值=1,最大值=10))
dat$月=月(dat$日期)
dat$年=年(dat$日期)
dat$yearPlot=ifelse(测试=dat$month
这使得这个图:


但是我希望x轴从3月份开始,而不是1月份。有什么方法可以调整吗?我想使用
dat
中的
month
列,但不确定如何实现

这里有一个不太好的解决方案。逻辑有点像你自己的:找到每个会计年度的开始日期/时间(3月1日=时间1)和最后日期/时间(2月28日=时间365)。使用此单独的“时间”变量作为x轴,然后重新标记记号。您可以更改
scale\u x\u continuous()
分隔符和标签,以获得沿x轴的所需日期

t='2019-03-01']%突变(time=seq(1:n())
数据%ggplot(.)+
几何路径(aes(x=时间,y=值,颜色=因子(fy),组=fy))+
连续缩放(间隔=c(1100200300),标签=c('3月1日'、'6月8日'、'9月16日'、'12月25日'))

使用
scale\u x\u date()
breaks\u width
参数,您可以在一年内将这些中断抵消几个月

labels
参数接受将标签格式化为会计年度的函数,例如将日期
2019-03-01
转换为
“19/20”


#用于为2014/15财年创建“14/15”等财年标签的函数

会计年度是否还希望
dat$year
反映财年而不是日历年?我将财年存储在yearPlot中。

# Function to create fiscal year labels like "14/15" for the 2014/15 fiscal year
fiscal_year <- function(x) {
  year_number <- lubridate::year(x)
  paste(substr(year_number, 3, 4),
        substr(year_number + 1, 3, 4),
        sep = "/")
}

ggplot(dat) +
  geom_path(aes(x = date, y = value, color = yearPlot)) +
  scale_x_date(labels = fiscal_year, # Use the function to create the labels
               breaks = scales::breaks_width("1 year", offset = 90)) # Offset by 90 days to March