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

时间:2020-07-20 15:01:10

标签: r dataframe ggplot2 tidyverse facet-wrap

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

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)

所需

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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)

enter image description here

相关问题