ggplot 在 R 中使用多个 data.frame 的 facet_wrap?

ggplot using facet_wrap of multiple data.frame in R?

我正在尝试 ggplot D2D1 相同的数字。但是,我在 D2 data.frame 中没有变量 X 的数据。我如何在 D1 plotfacets 上绘制 D2?这些图代表 20112014 的数据,所以我想 legends 代表 line 来区分哪个 line 代表哪个 year 数据.

library(tidyverse)

set.seed(1500)

D1 <- data.frame(Day = 1:8, A = runif(8, 2,16), S = runif(8, 3,14), X = runif(8, 5,10), Z = runif(8, 1,12), Year = rep("2011",8))
D2 <- data.frame(Day = 1:8, A = runif(8, 2,14), S = runif(8, 1,13),  Z = runif(8, 3,14), Year = rep("2014",8))

# plotting D1
 D1 %>% gather(-c(Day, Year), key = "Variable", value = "Value") %>% 
  ggplot( aes(x = Day, y = Value))+
  geom_line()+facet_wrap(~Variable,  scales = "free_y", nrow=2)

# Plotting D2 on top ?

如何将两个 DF 转换为长格式,然后在绘图之前将它们合并在一起?

library(tidyverse)

set.seed(1500)

D1 <- data.frame(Day = 1:8, A = runif(8, 2,16), S = runif(8, 3,14), 
                 X = runif(8, 5,10), Z = runif(8, 1,12), Year = rep("2011",8))
D1_long <- D1 %>% 
  pivot_longer(-c(Day, Year),
               names_to = 'Variable',
               values_to = 'Value')

D2 <- data.frame(Day = 1:8, A = runif(8, 2,14), S = runif(8, 1,13),  
                 Z = runif(8, 3,14), Year = rep("2014",8))
D2_long <- D2 %>% 
  pivot_longer(-c(Day, Year),
               names_to = 'Variable',
               values_to = 'Value')

### merge two data frames
DF <- bind_rows(D1_long, D2_long)

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

# plot DF
DF %>% 
  ggplot(aes(x = Day, y = Value, 
             color = Year,
             linetype = Year))+
  geom_line() +
  facet_wrap(~ Variable,  scales = "free_y", nrow = 2) +
  scale_color_brewer(palette = 'Dark2') +
  scale_linetype_manual(values = my_linetype) +
  theme_bw(base_size = 14) +
  theme(legend.position = 'bottom') +
  theme(legend.key.size = unit(2.5, 'lines'))

reprex package (v0.3.0)

于 2020-07-15 创建