Как нарисовать рамку/границу вокруг графиков, расположенных бок о бок, используя grid.arrange в R

Я создал два графика с помощью ggplot следующим образом:

library(ggplot2)
library(gridExtra)
g1 <- ggplot(iris, aes(Sepal.Width, Sepal.Length)) + geom_point()
g2 <- ggplot(iris, aes(Petal.Width, Petal.Length)) + geom_point()
grid.arrange(g1, g2, ncol=2)

Я хотел бы нарисовать рамку/рамку вокруг двух бок о бок графиков, созданных grid.arrange... Я думаю, что это как-то связано с использованием grid.border, но я не уверен, как именно это сделать. Будем признательны за любую помощь?


person Ramesh Maganti    schedule 02.09.2014    source источник
comment
Добро пожаловать в СО! Возможно, за вас проголосовали против, потому что обычно рекомендуется опубликовать вопрос с полным воспроизводимый пример и полный код, который можно запустить с помощью копирования-вставки.   -  person tonytonov    schedule 02.09.2014
comment
Извиняюсь... пишу впервые. Спасибо за редактирование.   -  person Ramesh Maganti    schedule 02.09.2014


Ответы (1)


Используя пример со страницы справки ggplot:

 gg <- df <- data.frame(gp = factor(rep(letters[1:3], each = 10)),
                  y = rnorm(30))

 library(plyr)
 ds <- ddply(df, .(gp), summarise, mean = mean(y), sd = sd(y))
 gg2 <-ggplot(df, aes(x = gp, y = y)) +
    geom_point() +
    geom_point(data = ds, aes(y = mean),
               colour = 'red', size = 3)+theme(panel.border=element_rect(fill=NA) )
 grid.arrange(gg2,gg2, ncol=2)

Или, возможно, это в зависимости от вашего смысла:

 gg2 <-ggplot(df, aes(x = gp, y = y)) +
    geom_point() +
    geom_point(data = ds, aes(y = mean),
               colour = 'red', size = 3)+theme(plot.background = element_rect(size=3,linetype="solid",color="black"))
 grid.arrange(gg2,gg2, ncol=2)

Если вам просто нужен ограничивающий прямоугольник:

grid.rect(.5,.5,width=unit(.99,"npc"), height=unit(0.99,"npc"), 
          gp=gpar(lwd=3, fill=NA, col="blue"))
person IRTFM    schedule 02.09.2014
comment
приведенное выше решение не рисует границу/рамку вокруг обоих несвязанных графиков? я ищу одну коробку/границу, которая заключает в себе все графики, созданные grid.arrange. спасибо - person Ramesh Maganti; 02.09.2014
comment
вы можете захотеть установить fill=NA явно, так как на некоторых устройствах по умолчанию он может быть белым, тем самым покрывая графики ниже. - person baptiste; 02.09.2014
comment
Хорошая точка зрения. Это произошло со мной на машине, на которой работала более ранняя версия R, хотя сейчас не на 3.1.0. - person IRTFM; 02.09.2014