# ggplot2设置坐标轴范围_ggplot2学习笔记之图形排列

## 简介

R语言基本绘图函数中可以利用par()以及layout()来进行图形排列，但是这两个函数对于ggplot图则不太适用，本文主要讲解如何对多ggplot图形多页面进行排列。主要讲解如何利用包gridExtra、cowplot以及ggpubr中的函数进行图形排列。

## 绘制图形

#load packageslibrary(gridExtra)library(cowplot)library(ggpubr)#dataset ToothGrowth and mtcarsmtcars$name mtcars$cyl head(mtcars[, c("name", "wt","mpg", "cyl")])

#First let's create some plots#Box plot(bxp)bxp #Dot plot(dp)dp #An ordered Bar plot(bp)bp color="white", #Set bar border colors to whitepalette = "jco", #jco jourbal color palettesort.val = "asc", #Sort the value in ascending ordersort.by.groups = TRUE, #Sort inside each groupx.text.angle=90 #Rotate vertically x axis texts )bp+font("x.text", size = 8)

#Scatter plots(sp)sp conf.int = TRUE, #Add confidence intervalcolor = "cyl", palette = "jco",#Color by group cylshape = "cyl" #Change point shape by groups cyl)+stat_cor(aes(color=cyl), label.x = 3) #Add correlation coefficientsp

## 图形排列

ggpubr::ggarrange()

ggarrange(bxp, dp, bp+rremove("x.text"), labels = c("A", "B", "C"), ncol = 2, nrow = 2)

cowplot::plot.grid()

plot_grid(bxp, dp, bp+rremove("x.text"), labels = c("A", "B", "C"), ncol = 2, nrow = 2)

gridExtra::grid.arrange()

grid.arrange(bxp, dp, bp+rremove("x.text"), ncol=2, nrow=2)

## 排列图形注释

ggpubr::annotate_figure()
figure annotate_figure(figure, top=text_grob("Visualizing mpg", color = "red",face = "bold", size=14), bottom = text_grob("Data source:\n mtcars data set",color = "blue", hjust = 1, x=1, face = "italic", size=10), left = text_grob("Figure arranged using ggpubr", color = "green", rot = 90),right = "I'm done, thanks :-)!", fig.lab = "Figure 1", fig.lab.face = "bold")

## 绘图面板对齐

library(survival)head(colon[, c(1:4)])#Fit survival curvesfit library(survminer)ggsurv pval = TRUE, pval.coord=c(500, 0.4), #Add p-valuerisk.table = TRUE #Add risk table)names(ggsurv)

## [1] "plot" "table" "data.survplot" "data.survtable"

ggsurv是一个包含两部分的list

• plot：生存曲线

• table：风险表
可以用ggarrange()进行排列这两者

ggarrange(ggsurv$plot, ggsurv$table, heights = c(2, 0.7), ncol = 1, nrow = 2)

上图中的坐标轴没有对齐，可以通过参数align来设置

ggarrange(ggsurv$plot, ggsurv$table, heights = c(2, 0.7), ncol = 1, nrow = 2, align = "v")

## 改变排列图的行列

ggarrange(sp, #First row with scatter plot(sp)ggarrange(bxp, dp, ncol = 2, labels = c("B","C")),#Second row with box and dot plotnrow = 2, labels = "A" #Labels of the scatter plot)

## R包cowplot

cowplot::ggdraw()可以将图形置于特定位置, ggdraw()首先会初始化一个绘图面板， 接下来draw_plot()则是将图形绘制于初始化的绘图面板中，通过参数设置可以将图形置于特定位置。

draw_plot(plot, x=0, y=0, width=1, height=1)

• plot:将要放置的图形

• x,y:控制图形位置

• width,height:图形的宽度和高度

• draw_plot_label():为图形添加标签

draw_plot_label(label, x=0, y=1, size=16, ...)

其中：

• label:标签

• x,y:控制标签位置

• size:标签字体大小

ggdraw()+ draw_plot(bxp, x=0, y=0.5, width=0.5, height = 0.5)+draw_plot(dp, x=0.5, y=0.5, width = 0.5, height = 0.5)+draw_plot(bp, x=0, y=0, width = 1.5, height = 0.5)+draw_plot_label(label = c("A", "B", "C"), size = 15, x=c(0, 0.5, 0), y=c(1, 1, 0.5))

## R包gridExtra

gridExtra::arrangeGrop()改变行列分布

grid.arrange(sp, #First row with one plot spaning over 2 columnsarrangeGrob(bxp, dp, ncol = 2), #Second row with 2plots in 2 different columnsnrow=2) #number of rows

grid.arrange(bp, #bar plot spaning two columnsbxp, sp, #box plot amd scatter plotncol=2, nrow=2, layout_matrix=rbind(c(1, 1), c(2, 3)))

gt p draw_plot_label(label = c("A", "B", "C"), size = 15, x=c(0, 0, 0.5), y=c(1, 0.5, 0.5))p

## R包grid

R包grid中的grid.layout()可以设置复杂的图形布局，viewport()可以定义一个区域用来安置图形排列，print()则用来将图形置于特定区域。总结起来步骤如下：

• 创建图形p1,p2,p3,…

• grid.newpage()创建一个画布

• 创建图形布局，几行几列

• 定义布局的矩形区域

• print：将图形置于特定区域

library(grid)
#Move to a new page
grid.newpage()
#Create layout:nrow=3, ncol=2
pushViewport(viewport(layout = grid.layout(nrow=3, ncol=2)))
#A helper function to define a region on the layout
define_region viewport(layout.pos.row = row, layout.pos.col = col)}
#Arrange the plots
print(sp, vp=define_region(row=1, col=1:2)) #Span over two columns
print(bxp, vp=define_region(row=2, col=1))
print(dp, vp=define_region(row=2, col=2))
print(bp+rremove("x.text"), vp=define_region(row=3, col=1:2))

## 设置共同图例

ggpubr::ggarrange()可以为组合图形添加共同图例

• common.legeng=TRUE:在图形旁边添加图例

• legend：指定legend的位置，主要选项有：top、bottom、left、right。

ggarrange(bxp, dp, labels = c("A", "B"), common.legend = TRUE, legend = "bottom")

## 含有边际密度图的散点图

sp palette = "jco", size=3, alpha=0.6)+border()#Marginal density plot of x(top panel) and y(right panel)xplot yplot #Clean the plotsxplot yplot #Arrange the plotsggarrange(xplot, NULL, sp, yplot, ncol = 2, nrow = 2, align = "hv", widths = c(2, 1),heights = c(1, 2), common.legend = TRUE)

## ggplot图、文本、表格组合

density.p #Compute the summary table of Sepal.Lengthstable stable #Summary table plot, medium and themestable.p text text.p #Arrange the plots on the same pageggarrange(density.p, stable.p, text.p, ncol = 1, nrow = 3, heights = c(1, 0.5, 0.3))

## ggplot图形中嵌入图形元素

ggplot2::annotation_custom()可以添加各种图形元素到ggplot图中

annotation_custom(grob, xmin, xmax, ymin, ymax)

• grob:要添加的图形元素

• xmin, xmax: x轴方向位置(水平方向)

• ymin, ymax: y轴方向位置(竖直方向)

## ggplot图形中添加table

density.p+annotation_custom(ggplotGrob(stable.p), xmin = 5.5, xmax = 8, ymin = 0.7)

## ggplot图形中添加box plot

sp xbp ybp # Create the external graphical objects# called a "grop" in Grid terminologyxbp_grob ybp_grob #place box plots inside the scatter plotxmin xmax ymin ymax yoffset xoffset # Insert xbp_grob inside the scatter plotsp+annotation_custom(grob = xbp_grob, xmin = xmin, xmax = xmax,ymin = ymin-yoffset, ymax = ymin+yoffset)+# Insert ybp_grob inside the scatter plotannotation_custom(grob = ybp_grob, xmin = xmin-xoffset,xmax=xmin+xoffset, ymin=ymin, ymax=ymax)

## ggplot图形添加背景

#import the imageimg.file img 

library(ggplot2)library(ggpubr)ggplot(iris, aes(Species,Sepal.Length))+background_image(img)+geom_boxplot(aes(fill=Species), color="white")+ fill_palette("jco")

## 修改透明度

ggplot(iris, aes(Species,Sepal.Length))+background_image(img)+geom_boxplot(aes(fill=Species), color="white", alpha=0.5)+fill_palette("jco")

## 多页排列

multi.page 

multi.page[[1]]

multi.page[[2]]

## 利用ggarrange()嵌套布局

p1 p2 heights = c(1, 0.5, 0.3))ggarrange(p1, p2, ncol = 2, nrow = 1)

## SessionInfo

sessionInfo()## R version 3.4.1 (2017-06-30)## Platform: x86_64-w64-mingw32/x64 (64-bit)## Running under: Windows 10 x64 (build 15063)#### Matrix products: default#### locale:## [1] LC_COLLATE=Chinese (Simplified)_China.936## [2] LC_CTYPE=Chinese (Simplified)_China.936## [3] LC_MONETARY=Chinese (Simplified)_China.936## [4] LC_NUMERIC=C## [5] LC_TIME=Chinese (Simplified)_China.936#### attached base packages:## [1] grid stats graphics grDevices utils datasets methods## [8] base#### other attached packages:## [1] survminer_0.4.0 survival_2.41-3 ggpubr_0.1.5 magrittr_1.5## [5] cowplot_0.8.0 ggplot2_2.2.1 gridExtra_2.2.1#### loaded via a namespace (and not attached):## [1] zoo_1.8-0 purrr_0.2.3 reshape2_1.4.2## [4] splines_3.4.1 lattice_0.20-35 colorspace_1.3-2## [7] htmltools_0.3.6 yaml_2.1.14 survMisc_0.5.4## [10] rlang_0.1.2 foreign_0.8-69 glue_1.1.1## [13] bindrcpp_0.2 bindr_0.1 plyr_1.8.4## [16] stringr_1.2.0 munsell_0.4.3 gtable_0.2.0## [19] ggsci_2.7 psych_1.7.5 evaluate_0.10.1## [22] labeling_0.3 knitr_1.17 parallel_3.4.1## [25] broom_0.4.2 Rcpp_0.12.12 xtable_1.8-2## [28] scales_0.4.1 backports_1.1.0 cmprsk_2.2-7## [31] km.ci_0.5-2 mnormt_1.5-5 png_0.1-7## [34] digest_0.6.12 stringi_1.1.5 dplyr_0.7.2## [37] KMsurv_0.1-5 rprojroot_1.2 tools_3.4.1## [40] lazyeval_0.2.0 tibble_1.3.3 tidyr_0.7.0## [43] pkgconfig_2.0.1 Matrix_1.2-11 data.table_1.10.4## [46] assertthat_0.2.0 rmarkdown_1.6 R6_2.2.2

## [49] nlme_3.1-131 compiler_3.4.1

### R统计和作图

• 维恩(Venn)图绘制工具大全 (在线+R包)
• 在R中赞扬下努力工作的你，奖励一份CheatShet
• 别人的电子书，你的电子书，都在bookdown
• R语言 - 入门环境Rstudio
• R语言 - 热图绘制 (heatmap)
• R语言 - 基础概念和矩阵操作
• R语言 - 热图简化
• R语言 - 热图美化
• R语言 - 线图绘制
• R语言 - 线图一步法
• R语言 - 箱线图(小提琴图、抖动图、区域散点图)
• R语言 - 箱线图一步法
• R语言 - 火山图
• R语言 - 富集分析泡泡图
• R语言 - 散点图绘制
• R语言 - 韦恩图
• R语言 - 柱状图
• R语言 - 图形设置中英字体
• R语言 - 非参数法生存分析
• R语言 - 绘制seq logo图
• WGCNA分析，简单全面的最新教程
• psych +igraph：共表达网络构建
• 一文学会网络分析——Co-occurrence网络图在R中的实现
• 一文看懂PCA主成分分析
• 富集分析DotPlot，可以服
• 基因共表达聚类分析和可视化
• R中1010个热图绘制方法
• 还在用PCA降维？快学学大牛最爱的t-SNE算法吧, 附Python/R代码
• 一个函数抓取代谢组学权威数据库HMDB的所有表格数据
• 文章用图的修改和排版
• network3D: 交互式桑基图
• network3D 交互式网络生成
• Seq logo 在线绘制工具——Weblogo
• 生物AI插图素材获取和拼装指导
• ggplot2高效实用指南 (可视化脚本、工具、套路、配色)
• 图像处理R包magick学习笔记
• SOM基因表达聚类分析初探
• 一分钟绘制磷脂双分子层：AI零基础入门和基本图形绘制
• AI科研绘图(二)：模式图的基本画法
• 你知道R中的赋值符号箭头(
• R语言可视化学习笔记之ggridges包
• 利用ComplexHeatmap绘制热图(一)
• ggplot2学习笔记之图形排列
• R包reshape2，轻松实现长、宽数据表格转换
• 用R在地图上绘制网络图的三种方法
• PCA主成分分析实战和可视化 附R代码和测试数据
• iTOL快速绘制颜值最高的进化树！
• 12个ggplot2扩展包帮你实现更强大的可视化
• 编程模板-R语言脚本写作：最简单的统计与绘图，包安装、命令行参数解析、文件读取、表格和矢量图输出
• R语言统计入门课程推荐——生物科学中的数据分析Data Analysis for the Life Sciences
• 数据可视化基本套路总结
• 你知道R中的赋值符号箭头和等号=`的区别吗？
• 使用dplyr进行数据操作30例
• 交集intersect、并集union、找不同setdiff
• R包reshape2，轻松实现长、宽数据表格转换
• 1数据类型(向量、数组、矩阵、 列表和数据框)
• 2读写数据所需的主要函数、与外部环境交互
• 3数据筛选——提取对象的子集
• 4向量、矩阵的数学运算
• 5控制结构
• 6函数及作用域
• 7认识循环函数lapply和sapply
• 8分解数据框split和查看对象str
• 9模拟—随机数、抽样、线性模型
• 1初识ggplot2绘制几何对象
• 2图层的使用—基础、加标签、注释
• 3工具箱—误差线、加权数、展示数据分布
• 4语法基础
• 5通过图层构建图像
• 6标度、轴和图例
• 7定位-分面和坐标系
• 8主题设置、存储导出
• 9绘图需要的数据整理技术
• 创建属于自己的调色板
• 28个实用绘图包，总有几个适合你
• 热图绘制
• R做线性回归
• 绘图相关系数矩阵corrplot
• 相关矩阵可视化ggcorrplot
• 绘制交互式图形recharts
• 交互式可视化CanvasXpress
• 聚类分析factoextra
• LDA分析、作图及添加置信-ggord
• 解决散点图样品标签重叠ggrepel
• 添加P值或显著性标记ggpubr
• Alpha多样性稀释曲线rarefraction curve
• 堆叠柱状图各成分连线画法：突出组间变化
• 冲击图展示组间时间序列变化ggalluvial
• 桑基图riverplot
• 微生物环境因子分析ggvegan
• 五彩进化树与热图更配ggtree
• 多元回归树分析mvpart
• 随机森林randomForest 分类Classification 回归Regression
• 加权基因共表达网络分析WGCNA
• circlize包绘制circos-plot
• R语言搭建炫酷的线上博客系统
• 28个实用绘图包，总有几个适合你
• 热图绘制
• R做线性回归
• 绘图相关系数矩阵corrplot
• 相关矩阵可视化ggcorrplot
• 绘制交互式图形recharts
• 交互式可视化CanvasXpress
• 聚类分析factoextra
• LDA分析、作图及添加置信-ggord
• 解决散点图样品标签重叠ggrepel
• 添加P值或显著性标记ggpubr
• Alpha多样性稀释曲线rarefraction curve
• 堆叠柱状图各成分连线画法：突出组间变化
• 冲击图展示组间时间序列变化ggalluvial
• 桑基图riverplot
• 微生物环境因子分析ggvegan
• 五彩进化树与热图更配ggtree
• 多元回归树分析mvpart
• 随机森林randomForest 分类Classification 回归Regression
• 加权基因共表达网络分析WGCNA
• circlize包绘制circos-plot
• R语言搭建炫酷的线上博客系统
• 维恩(Venn)图绘制工具大全 (在线+R包)
• R包circlize：柱状图用腻了？试试好看的弦状图
• 获取pheatmap聚类后和标准化后的结果
• 增强火山图，要不要试一下？
• 一个震撼的交互型3D可视化R包 - 可直接转ggplot2图为3D
• 赠你一只金色的眼 - 富集分析和表达数据可视化
• 是Excel的图，不！是R的图
• 道友，来Rstudio里面看动画了
• 用了这么多年的PCA可视化竟然是错的！！！

• 2
点赞
• 11
收藏
• 0
评论
11-18 54
07-21 118
09-08 1万+
08-13 17万+
10-06 3万+
02-16 1万+

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助