ggplot2绘图:多张图合并为一张

以下内容来自教程

  • ggplot2 - Easy Way to Mix Multiple Graphs on the Same Page

R语言中多张图画到同一个页面上常用的函数为par()layout()
par()函数详解

  • https://blog.csdn.net/heidlyn/article/details/54581605

layout()函数的简单使用

  • https://blog.csdn.net/mr_muli/article/details/80000449

但是这两个函数不适用于ggplot2ggplot2作图如果希望把多张图放到同一个页面上基本的解决办法是使用(The basic solution is to use the gridExtra R package),主要的两个函数为grid.arrange()arrangeGrob();然而这两个函数都有各自的缺点(说明缺点的英文暂时还没有看懂)

  • these functions makes no attempt at aligning the plot panels; instead, the plots are simply placed into the grid as they are, and so the axes are not aligned.

为了解决这个问题,可以使用cowplot这个Rpackage,其中包括一个函数plot_grid();然而这个包也有一个缺点

  • the cowplot package doesn't contain any solution for multi-pages layout

所以就有了ggpubr包中的ggarrange()函数

  • a wrapper around the plot_grid() function(wrapper是什么意思呢?)
  • to arrange multiple ggplots over multiple pages
  • it can also create a common unique legend for multiple plots.
第一步安装

两种方式可以选择

  • 1
    library(devtools)
    install_github("kassambara/ggpubr")
  • 2
    install.packages("ggpubr")
第二步使用ggplot2绘图

使用到的数据是ToothGrowth
data("ToothGrowth")
data("mtcars")

  • 1 箱线图
library(ggplot2)
df_box<-ToothGrowth
df_box$dose<-factor(df_box$dose)
ggplot(data=df_box,aes(x=dose,y=len,group=dose))+
  geom_boxplot()+theme_bw()
p1
ggplot2绘图:多张图合并为一张_第1张图片
Rplot02.png
  • 2 柱形图
    柱形图安装从小到大的顺序往后画,印象里是可以用reorder()函数实现的,但是想不起来怎么用了,刚刚找到了一个教程,reorder是放在aes()中x的位置,reorder第一个参数是排序的因子变量,第二个是数值变量R中排序函数总结:sort,order,rank,arrange,reorder
df_bar<-mtcars
df_bar$name<-row.names(df_bar)
df_bar$name
p2<-ggplot(data=df_bar,aes(x=reorder(name,mpg), y=mpg))+
  geom_bar(stat="identity")+labs(x="")+theme_bw()+
  theme(axis.text.x=element_text(angle=60,vjust=1,hjust=1))
p2
ggplot2绘图:多张图合并为一张_第2张图片
Rplot08.png
  • 3 散点图
p3<-ggplot(df_bar,aes(x=wt,y=mpg,color=factor(cyl),shape=factor(cyl)))+
  geom_point()+theme_bw()+
  theme(legend.title = element_blank(),
        legend.key.size = unit(2,"cm"),
        legend.background = element_blank(),
        legend.position=c(0.8,0.7))
p3
ggplot2绘图:多张图合并为一张_第3张图片
Rplot09.png

怎么把图例的背景去掉呢???

第三步合并
library(ggpubr)
ggarrange(p1,p2,p3,ncol=2,nrow=2,labels=c("A","B","C"))
ggplot2绘图:多张图合并为一张_第4张图片
Rplot10.png
ggarrange(p2,ggarrange(p1,p3,ncol=2,labels=c("B","C")),nrow=2,labels="A")
ggplot2绘图:多张图合并为一张_第5张图片
Rplot11.png

https://blog.csdn.net/superbfly/article/details/45971791
http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/
https://ggplot2.tidyverse.org/reference/guide_legend.html
https://www.zhihu.com/question/56389259
https://cran.r-project.org/web/packages/gridExtra/vignettes/arrangeGrob.html

更新20191203

有的小伙伴留言说不同的数据集不能够合并,自己尝试了一下
代码

data1<-data.frame(A=sample(1:100,25),
                  B=sample(1:100,25))
data2<-data.frame(A=rnorm(10,2,25),
                  B=rnorm(20,3,25))
library(ggplot2)
p1<-ggplot(data1,aes(x=A,y=B))+
  geom_point(color="blue")+
  theme_bw()
p2<-ggplot(data2,aes(x=A,y=B))+
  geom_point(color="red")+
  theme_bw()
ggpubr::ggarrange(p1,p2,ncol=2)
ggplot2绘图:多张图合并为一张_第6张图片
image.png

并没有遇到问题

另外,最近好像出了一个新包patchwork用来拼图
可以参考

  • biobabble 公众号文章 cowplot乃旧爱,patchwork是新欢
  • 生信星球 公众号文章 大佬新包patchwork:可能是迄今为止最优秀的拼图包

欢迎大家关注我的公众号
小明的数据分析笔记本

ggplot2绘图:多张图合并为一张_第7张图片
公众号二维码.jpg

你可能感兴趣的:(ggplot2绘图:多张图合并为一张)