作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源

又到了亲爱的严涛老师时间:诺奖文章里面的动图绘制教程来了!!R包ggseqlogo |绘制序列分析图ggplot2高效实用指南 (可视化脚本、工具、套路、配色)ComplexHeatmap |理解绘图逻辑绘制热图R语言可视化学习笔记之ggridges包

简介

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 white
palette = "jco", #jco jourbal color palette
sort.val = "asc", #Sort the value in ascending order
sort.by.groups = TRUE, #Sort inside each group
x.text.angle=90 #Rotate vertically x axis texts )
bp+font("x.text", size = 8)

#Scatter plots(sp)
sp conf.int = TRUE, #Add confidence interval
color = "cyl", palette = "jco",#Color by group cyl
shape = "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 curves
fit library(survminer)
ggsurv pval = TRUE, pval.coord=c(500, 0.4), #Add p-value
risk.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")

改变排列图的行列

设置面板为两行两列,其中sp占据第一行的两列,bxp以及dp置于第二行的两列

ggarrange(sp, #First row with scatter plot(sp)
ggarrange(bxp, dp, ncol = 2, labels = c("B","C")),#Second row with box and dot plot
nrow = 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()改变行列分布

下面将sp置于第一行并横跨两列,而bxp和dp分别分布于第二行两列

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

也可以通过函数grid.arrange中的layout_matrix来设置复杂的图形布局

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

要相对grid.arrange()以及arrangeGrob()的输出进行注释,首先要利用as_ggplot()将其转化为ggplot图形,进而利用函数draw_plot_label()对其进行注释。

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 plots
xplot yplot #Arrange the plots
ggarrange(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 terminology
xbp_grob ybp_grob #place box plots inside the scatter plot
xmin xmax ymin ymax yoffset xoffset # Insert xbp_grob inside the scatter plots
p+annotation_custom(grob = xbp_grob, xmin = xmin, xmax = xmax,
ymin = ymin-yoffset, ymax = ymin+yoffset)+
# Insert ybp_grob inside the scatter plot
annotation_custom(grob = ybp_grob, xmin = xmin-xoffset,
xmax=xmin+xoffset, ymin=ymin, ymax=ymax)

ggplot图形添加背景

#import the imageimg.file img 

利用ggpubr::background_image()为ggplot图形添加背景图

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")

多页排列

日常工作中我们有时要绘制许多图,假如我们有16幅图,每页排列4张的话就需要4页才能排完,而ggpubr::ggarrange()可以通过制定行列数自动在多页之间进行图形排列

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统计和作图

  • Graphpad,经典绘图工具初学初探
  • 维恩(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基因表达聚类分析初探
  • 利用gganimate可视化全球范围R-Ladies(R社区性别多样性组织)发展情况
  • 一分钟绘制磷脂双分子层: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可视化竟然是错的!!!
  • R语言可视化学习笔记之ggridges包

  • 万能转换:R图和统计表转成发表级的Word、PPT、Excel、HTML、Latex、矢量图等

  • 那天空飘过的梅花月饼,是今年中秋最好的礼物

ggplot2设置坐标轴范围_ggplot2学习笔记之图形排列相关推荐

  1. ggplot2设置坐标轴范围_ggplot2画图时出现重合的点以及标签如何处理?有现成的包ggrepel

    公众号:生物信息学习 ggplot2画图时出现重合的点以及标签如何处理?有现成的包ggrepel​mp.weixin.qq.com 在R中散点图的时候会经常出现,点重合,点的标签重合比较严重的现象,这 ...

  2. ggplot2设置坐标轴范围_ggplot2|详解八大基本绘图要素

    本文首发于微信公众号" 生信补给站 ",期待您的关注!!! "一张统计图形就是从数据到几何对象(geometric object, 缩写为geom, 包括点.线.条形等) ...

  3. UE5 Shader基础学习笔记——01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合

    UE5 Shader基础学习笔记--01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合 Lec01 ...

  4. Python学习笔记·交互式图形编程

    Python学习笔记·交互式图形编程 注:在校计算机学生一名,菜鸟一枚,最近开始学习Python的基础知识希望有什么不对的地方各位大佬能够不令赐教! 课程是在中国大学MOOC上学的,有兴趣的同学可以自 ...

  5. python图形设置_python学习笔记——基本图形绘制

    1.python蟒蛇python蟒蛇代码 #PythonDraw.py import turtle turtle.setup(650,350,200,200)# 设置画布的长.宽.起点 turtle. ...

  6. ggplot2设置坐标轴范围_6.2 坐标轴:对连续变量设置坐标轴显示范围

    参考自<R Graphics Cookbook> 对连续变量调整其坐标轴的显示范围和和设置其坐标轴显示的间隔,是难以避免的. 因为映射给y轴往往是连续变量,若针对y轴设置坐标轴显示范围,使 ...

  7. ggplot2设置坐标轴范围_matplotlib画图教程,设置坐标轴标签和间距

    大家好,欢迎来到周四数据处理专题,我们今天继续matplotlib作图教程. 在上周的文章当中我们介绍了如何通过xlabel和ylabel设置坐标轴的名称,以及这两个函数的花式设置方法,可以设置出各种 ...

  8. ggplot2设置坐标轴范围_使用 ggplot2 进行高级绘图—R读书笔记(二)

    这篇文章没有接第3章的内容,而是跳到19章总结一下ggplot2包的使用. 在R中,有大概四种独立而完整的图形系统.除了基础图形外, grid . lattice 和 ggplot2 软件包也提供了图 ...

  9. ggplot2设置坐标轴范围_R可视化03|ggplot2图层-几何对象图层(geom layer)

    前面简单介绍ggplot2是基于图层图形语法(the Grammar of Graphics),一张完整图由不同图层叠加而成,本文介绍几何对象图层(geom layer),续前篇: R可视化01|gg ...

  10. ggplot2设置坐标轴范围_Matplotlib入门-2-坐标轴axis/axes设置

    这里并没有涵盖所有的的关于axis的设置方法,将一些常用的操作写出来,供大家学习使用.其余的一些高级操作,作为前期学习而言也没必要展示,用到的话,后续再补充. 学习前欢乐一下:这里有个Python界未 ...

最新文章

  1. SpringCloud系列一:SpringCloud的简介和架构
  2. 【BZOJ】1711: [Usaco2007 Open]Dining吃饭
  3. R语言条件Logistic回归模型案例:研究饮酒与胃癌的关系
  4. Ubuntu安装VSCode
  5. 选择要加载的插件有什么用_为什么/如何PPT形状圆角化,用好这个插件,画出更多神奇形状...
  6. 硬件检测你用哪一款工具呢?
  7. condition_variable的怪事
  8. 在C#中IEnumerable与IEnumerator
  9. 机器人煮面机创始人_煮面机器人会是未来的「食神」吗?
  10. c语言自动插桩,静态插桩的方式来实现Hook Method
  11. Word2016更改不同的级别标题序号:如2.2 ,2.2.1类标题序号
  12. linux安装阵列卡驱动程序,linux 安装阵列卡驱动
  13. 通过 api 调用检查具体日期是否为法定节假日
  14. acdream 1401 Lempel-Ziv Compression
  15. 出生日期正则表达式丨出生日期年月日正则如何表达?
  16. msys2在windows10系统的安装
  17. Dev-C++安装OpenCV
  18. Scala核心编程 第六章—Scala面向对象编程(一)
  19. AI云服务大幕开启,谁的时代,谁主沉浮
  20. 【开发工具】 什么是Office 今天让你认识它

热门文章

  1. Android安卓原生实现微信登陆
  2. Redis设计与实现(一)| 数据结构 对象
  3. 入门级概述光学相干层析(OCT)原理
  4. C语言实现简单的电子通讯录
  5. 低效程序员的9个坏习惯
  6. u盘安装红旗linux操作系统,如何用u盘安装红旗linux?
  7. 985学生:为什么现在学校还在教C语言?| 文末送书
  8. 噪音达到多少分贝就算是扰民
  9. 如何批量保存苏宁易购里的商品图片
  10. 【计算机网络】Web服务器的配置