简体   繁体   中英

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

I am trying to achieve the attached hand drawn figure using the code below but its showing white spaces for all the years that i do not have data for. Any help would be appreciated.

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)

Desired Out

在此处输入图像描述

You can make a dummy Date variable in your data.frame where the year is equal among different groups. In the example below this added in the mutate() statement under the Unyear variable.

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)

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM