基于这个question和R中“water year”的使用,我对在ggplot2中使用多年的公共日期轴进行绘图存在疑问。水年肯定是从10月1日到9月30日结束的一年的开始。对水文循环而言,它更有意义。

所以说我有这个数据集:

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()

因此,绘制该日期显然是从一月到十二月。有什么想法可以迫使ggplot2沿着水年线绘制这些图?

最佳答案

这是一种有效的方法:

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")

这使:

r - 用ggplot2绘制非标准年份(水年)-LMLPHP

关于r - 用ggplot2绘制非标准年份(水年),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40351788/

10-09 06:46