ggplot 在 R 中使用不同长度的多个 data.frame 的 facet_wrap?

ggplot using facet_wrap of multiple data.frame with different length in R?

我正在尝试使用下面的代码来实现所附的手绘图,但它显示了我没有数据的所有年份的空白。任何帮助将不胜感激。

library(lubridate)
library(tidyverse)

set.seed(123)

D1 <- data.frame(Date = seq(as.Date("2001-07-14"), to= as.Date("2001-07-21"), by="day"),
           A = runif(8, 0,10),
           D = runif(8,5,15)) %>% 
    gather(-Date, key = "Variable", value = "Value")

D2 <- data.frame(Date = seq(as.Date("1998-07-14"), to= as.Date("1998-08-30"), by="day"),
                 A = runif(48, 0,10),
                 D = runif(48,5,15)) %>% 
    gather(-Date, key = "Variable", value = "Value")

D <- bind_rows(D1,D2) %>% mutate(Year = year(Date))

my_linetype <- setNames(c("dashed", "solid"), unique(D$Year))

ggplot(data = D, aes(x = Date, y = Value, color = as.factor(Year), linetype = as.factor(Year)))+
  geom_line(size = 1.1)+ facet_wrap(~Variable,  scales = "free_y", nrow=2)

期望输出

您可以在 data.frame 中创建一个虚拟 Date 变量,其中不同组之间的年份相同。在下面的示例中,这在 Unyear 变量下的 mutate() 语句中添加。

D <- bind_rows(D1,D2) %>% mutate(Year = year(Date),
                                 Unyear = {year(Date) <- 0; Date})

my_linetype <- setNames(c("dashed", "solid"), unique(D$Year))

ggplot(data = D, aes(x = Unyear, y = Value, color = as.factor(Year), linetype = as.factor(Year)))+
  geom_line(size = 1.1)+ facet_wrap(~Variable,  scales = "free_y", nrow=2)