R - объединить несколько (15) объектов ggplot в одном изображении - PullRequest
1 голос
/ 18 апреля 2020

Я хочу объединить 15 объектов ggplot только в одном изображении. Все графики имеют одинаковые размеры по x и y. Например, с 2 объектами:

 library(ggplot2)     

 a <- c(1:10)
 b <- c(5,4,3,2,1,6,7,8,9,10)

 a2 <- c(1:10)
 b2 <- c(10:1)

 df1 <- as.data.frame(x=a,y=b)
 df2 <- as.data.frame(x=a2,y=b2)

 p1 <- ggplot(df1,aes(a, b)) + geom_line()
 p2 <- ggplot(df2,aes(a2, b2)) + geom_point()

Я пытался с plot_grid, но в результате получается одно изображение для объекта ggplot:

 library(cowplot)
 plot_grid(p1, p2, labels = "AUTO")

Я тоже с сетками, но это тот же результат, что и выше ,

Мое временное решение таково:

 merge <- p1 +geom_point(data=df2,aes(x=a2, y=b2))

Но у меня есть объект 15 ggplot. Есть ли способ сделать что-то вроде?

 merge <- p1 + p2 +p3 ...+p15
 merge

Смотрите фотографии, пожалуйста, и спасибо за вашу помощь.

I want this result Undesirable result

1 Ответ

2 голосов
/ 18 апреля 2020

Мы могли бы использовать

library(ggplot2)
ggplot() + 
      geom_line(data = df1, aes(a, b)) + 
      geom_point(data = df2, aes(a2, b2))

-output

enter image description here


Или, если мы уже создали объекты, reduce это и сюжет

library(purrr)
p0 <- ggplot()
p1 <- geom_line(data = df1, aes(a, b))
p2 <-    geom_point(data = df2, aes(a2, b2))
mget(paste0('p', 0:2)) %>%
          reduce(`+`)

enter image description here

...