Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to draw a box/border around plots arranged side by side using grid.arrange in R

I have created two plots using ggplot as follows:

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)

I would like to draw a border/box around the two side by side plots produced by grid.arrange...I think it is something to do with using grid.border, but am not sure of how exactly to do so. Will appreciate any help?

like image 791
Ramesh Maganti Avatar asked Oct 21 '25 15:10

Ramesh Maganti


1 Answers

Using an example from the ggplot help page:

 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)

Or perhaps this depending on your meeaning:

 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)

If you just want a bordering rectangle:

grid.rect(.5,.5,width=unit(.99,"npc"), height=unit(0.99,"npc"), 
          gp=gpar(lwd=3, fill=NA, col="blue"))
like image 144
IRTFM Avatar answered Oct 23 '25 04:10

IRTFM



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!