I am wondering if anyone else had experienced the same problem as I can't find any post about it and don't know how to resolve it.
I am plotting 8 graphs and wanted to create a plot grid using ggarrange with the same legend.
Below is my code:
#gg3 is the data frame containing all my data. I created a for loop for all my plots
splot <- list()
for(i in 1:8){
splot[[i]] <- ggplot(gg3, aes(x=D50, y=gg3[ ,i],colour=group)) +
geom_point(aes(shape=group, color=group)) +
scale_shape_manual(values=c(16, 16),labels=c(paste("\u03B1"),paste("\u03B2"))) +
scale_color_manual(values=c("firebrick1","dodgerblue1"),labels=c(paste("\u03B1"),paste("\u03B2"))) +
theme_classic()+
geom_smooth(method=lm, se=F)+ labs(y=colnames(gg3)[i])
}
ggarrange(plotlist = splot,common.legend = T)
below is the ggarrange result. I managed to combine all of them, and each graph has different y-axis label (so they must have been different graphs) but the actual graphs are identical in the ggarrange object. I've checked my dataframe (gg3) and the values are all different.
Is this a bug in ggarrange?
p/s: I've tried grid.arrange too and same results
Thank you
2 answers
Hi all,
I did a bit more searching and managed to answered my own question. Will leave this here as it may help someone else.
I found this Q&A which suggests that storing plot in a list using a for loop can lead to a similar problem:
https://stackoverflow.com/questions/46417470/saving-ggplot-in-a-list-gives-me-the-same-graph
So I've tried their suggestion and used grid.arrange instead which worked for me. What I still can't figure out is this: I used the same code to save my list of plots into PDF and it worked. So I still don't understand why it couldn't work using ggarrange.
Use lapply instead:
g <- lapply(split(mtcars, mtcars$cyl), function(i){
ggplot(i, aes(mpg, wt)) + geom_point()
})
ggpubr::ggarrange(plotlist = g)
Log in to answer this question.