在此question的基础上,使用"水年"在R中我有关于使用共同日期轴多年绘制ggplot2的问题。水年绝对是9月30日结束的10月1日的年初。对于水文循环来说,它更为明智。
所以说我有这个数据集:
library(dplyr)
library(ggplot2)
library(lubridate)
df <- data.frame(Date=seq.Date(as.Date("1910/1/1"), as.Date("1915/1/1"), "days"),
y=rnorm(1827,100,1))
然后是wtr_yr函数:
wtr_yr <- function(dates, start_month=10) {
# Convert dates into POSIXlt
dates.posix = as.POSIXlt(dates)
# Year offset
offset = ifelse(dates.posix$mon >= start_month - 1, 1, 0)
# Water year
adj.year = dates.posix$year + 1900 + offset
# Return the water year
adj.year
}
我想要做的是使用颜色作为分组变量,然后创建一个仅包含月份和日期信息的x轴。通常我都是这样做的(使用lubridate包):
ymd(paste0("1900","-",month(df$Date),"-",day(df$Date)))
如果正常安排年份,这项工作正常。然而,在这个水年情景中,实际年份跨越水年。理想情况下,我喜欢从10月1日到9月30日的情节,并为每个水年绘制单独的线,保持所有正确的水年。这是我到目前为止的地方:
df1 <- df %>%
mutate(wtr_yrVAR=factor(wtr_yr(Date))) %>%
mutate(CDate=as.Date(paste0("1900","-",month(Date),"-",day(Date))))
df1 <- %>%
ggplot(aes(x=CDate, y=y, colour=wtr_yrVAR)) +
geom_point()
因此,从1月到12月的情况显示日期跨度明显。任何想法如何强制ggplot2沿水年线绘制这些?
答案 0 :(得分:4)
这是一种有效的方法:
df3 <- df %>%
mutate(wtr_yrVAR=factor(wtr_yr(Date))) %>%
#seq along dates starting with the beginning of your water year
mutate(CDate=as.Date(paste0(ifelse(month(Date) < 10, "1901", "1900"),
"-", month(Date), "-", day(Date))))
然后:
df3 %>%
ggplot(., aes(x = CDate, y = y, colour = wtr_yrVAR)) +
geom_point() +
scale_x_date(date_labels = "%b %d")
给出了:
答案 1 :(得分:0)
不是很优雅,但这应该有效:
df1 <- df %>%
mutate(wtr_yrVAR=factor(wtr_yr(Date))) %>%
mutate(CDdate= as.Date(as.numeric(Date - as.Date(paste0(wtr_yrVAR,"-10-01"))), origin = "1900-10-01"))
df1 %>% ggplot(aes(x =CDdate, y=y, colour=wtr_yrVAR)) +
geom_line() + theme_bw()+scale_x_date(date_breaks = "1 month", date_labels = "%b", limits = c(as.Date("1899-09-30"),as.Date("1900-10-01")))+theme_bw()