告别加班!gggenes让你5分钟获得基因结构图

各位小伙伴大家好啊,又到了小果的代练时间啦,是不是很激动呢?让我们这就开始今天的问题吧~

昨晚小果在整理自己的工作内容的时候,看到同事在对已获得部分研究结果的基因组数据进行分析,问题情境是:要具现多个染色体上,个别基因的位置关系,并根据其基因长度和位置间隙等比例缩放。然后同事就使用计算器进行等比例缩放,使用AI进行21个染色体,一共143个基因的绘制。幸亏最后小果及时出手,要不然同事这个班加的太“亏”了。所以今天,小果想把这个R包分享给各位小伙伴,以便减轻小伙伴们的工作压力和美化我们的结果。

今天这个能给大家带来方便的R包叫做gggenes,没错!看名字就知道它是ggplot2包的拓展包,因此它能完美继承各种ggplot2包的基础函数,达到高度的调控性,因此能可视化出效果较好的基因结构图,这种图形通常显示基因的外显子和内含子,以及各转录本的基因结构信息。

所以,要进行该基因结构图的绘制,不能避免的要对基因结构进行研究,而对于这种针对测序数据结构文件的处理,小果推荐使用服务器进行,因为有多个软件是针对Linux系统进行编写,对大数据的处理更加友好,如果各位小伙伴现在没有服务器的话,可以联系小果进行租赁哦~

那下面就开始我们今天的代练吧!

#BiocManager::install(“wilkox/gggenes”)

library(gggenes)

library(ggplot2)

library(RColorBrewer)

的确有的包可以通过install.packages(‘’)命令进行安装,但这是在CRAN中原本就已经存在的,gggenes为个人编写,所以可以在Github上进行下载安装,其中‘/’前的‘wilkox’为编写人的仓库名称,后面则为包的名称。

display.brewer.all() #是RcolorBrewer的函数,能查看该包中所有的色块,对画图时颜色的选取有帮助

#数据读入

data <- read.table(‘gggenes.txt’,header = T,sep = ‘\t’)

head(data)

chr代表分别是哪几条染色体,gene代表的是某一染色体上的哪个基因,star和end表示基因的起始与终止并用strand表示基因的方向。

文本

中度可信度描述已自动生成

subdata <- read.table(‘subgene.txt’,header = T,sep=’\t’)

head(subdata)

文本

描述已自动生成

大家可以看到,subdata相较于data而言多了‘subgene’,‘from’和‘to’这三列,分表表示,某染色体上某基因的转录本或内含子的起始和终止位点。

#简单出图

P1 <- ggplot(data , aes(xmin = start, xmax = end, y = chr, fill = gene)) +

geom_gene_arrow(arrowhead_width = grid::unit(2, “mm”), #对箭头的头的宽度进行调整

arrowhead_height = grid::unit(4, “mm”), #对箭头的头的高度进行调整

arrow_body_height = grid::unit(4, “mm”),) + #对箭头的体宽进行调整

facet_wrap(~ chr, #可以是变可以是公式,代表根据chr这一变量分别绘制一张图

scales = “free”, #有fixed和free两种,控制的是每张图的刻度数,free表示每个图有独立的刻度

ncol = ) + #在屏幕上的展示方式有ncol和nrow两个函数控制

scale_fill_brewer(palette = “Set3”)

P1

图片包含 日程表

描述已自动生成

#更改主题

P2 <- ggplot(data , aes(xmin = start, xmax = end, y = chr, fill = gene)) +

geom_gene_arrow(arrowhead_width = grid::unit(2, “mm”), #对箭头的头的宽度进行调整

arrowhead_height = grid::unit(4, “mm”), #对箭头的头的高度进行调整

arrow_body_height = grid::unit(4, “mm”),) + #对箭头的体宽进行调整

facet_wrap(~ chr, #可以是变可以是公式,代表根据chr这一变量分别绘制一张图

scales = “free”, #有fixed和free两种,控制的是每张图的刻度数,free表示每个图有独立的刻度

ncol = 1) + #在屏幕上的展示方式有ncol和nrow两个函数控制

scale_fill_brewer(palette = “Set3″) +

ylab(”) +

theme_bw() #因为该函数是ggplot2的拓展,所以可以通过theme函数自定义,theme_gene是其自带函数

P2

日程表

描述已自动生成

#添加gene标签

P3 <- ggplot(data , aes(xmin = start, xmax = end, y = chr, fill = gene, label = gene)) +

geom_gene_arrow(arrowhead_width = grid::unit(2, “mm”), #对箭头的头的宽度进行调整

arrowhead_height = grid::unit(4, “mm”), #对箭头的头的高度进行调整

arrow_body_height = grid::unit(4, “mm”),) + #对箭头的体宽进行调整

facet_wrap(~ chr, #可以是变可以是公式,代表根据chr这一变量分别绘制一张图

scales = “free”, #有fixed和free两种,控制的是每张图的刻度数,free表示每个图有独立的刻度

ncol = 1) + #在屏幕上的展示方式有ncol和nrow两个函数控制

scale_fill_brewer(palette = “Set3”) +

geom_gene_label(align = ‘left’) + #标签角度’centre’,’left’ and ‘right’.

theme_genes() #因为该函数是ggplot2的拓展,所以可以通过theme函数自定义,theme_gene是其自带函数

P3

图示

低可信度描述已自动生成

#按照基因方向进行翻转

P4 <- ggplot(data , aes(xmin = start, xmax = end, y = chr, fill = gene, label = gene,forward = orientation)) +

geom_gene_arrow(arrowhead_width = grid::unit(4, “mm”), #对箭头的头的宽度进行调整

arrowhead_height = grid::unit(4, “mm”), #对箭头的头的高度进行调整

arrow_body_height = grid::unit(4, “mm”),) + #对箭头的体宽进行调整

facet_wrap(~ chr, #可以是变可以是公式,代表根据chr这一变量分别绘制一张图

scales = “free”, #有fixed和free两种,控制的是每张图的刻度数,free表示每个图有独立的刻度

ncol = 1) + #在屏幕上的展示方式有ncol和nrow两个函数控制

scale_fill_brewer(palette = “Set3”) +

geom_gene_label(align = ‘centre’) +

theme_genes() #因为该函数是ggplot2的拓展,所以可以通过theme函数自定义,theme_gene是其自带函数

P4

图示, 日程表

描述已自动生成

#对个别基因的内部结构做标识

P5 <- ggplot(subdata , aes(xmin = start, xmax = end, y = chr, forward = orientation)) +

geom_gene_arrow(arrowhead_width = grid::unit(4, “mm”), #对箭头的头的宽度进行调整

arrowhead_height = grid::unit(4, “mm”), #对箭头的头的高度进行调整

arrow_body_height = grid::unit(4, “mm”),) + #对箭头的体宽进行调整

geom_subgene_arrow(data = subdata,aes(xmin = start, xmax = end,y = chr,fill = subgene,

xsubmin = from,xsubmax = to),color = ‘black’) +

facet_wrap(~ chr, #可以是变可以是公式,代表根据chr这一变量分别绘制一张图

scales = “free”, #有fixed和free两种,控制的是每张图的刻度数,free表示每个图有独立的刻度

ncol = 1) + #在屏幕上的展示方式有ncol和nrow两个函数控制

scale_fill_brewer(palette = “Set3″) +

theme_bw() +

ylab(”)

P5

图片包含 图示

描述已自动生成

好啦,以上就是今天全部的代码代练哦,是不是很简单呢,其中前4张图用到的数据是data,最后一张图用到的数据是subdata。不知道大家有没有注意,在最后绘图的时候ggplot后面的aes中被小果删除了fill这个选项,而在后面的geom_subgene_arrow的函数中添加了fill = subgene,这是因为如果不删除ggplot中的填充映射的话会导致整个基因都被填充上颜色,而导致无法分辨某个基因的内部结构。

其实,基因结构图可适用于多个场合,包括基因注释、结构变异和质粒构建等,说明这还是很重要的。但如果各位小伙伴并不想在图形可视化上下太大的功夫,可以来小果的云生信平台,里面有多个已经成熟的代码,能帮助各位小伙伴火速出图,且支持字体和颜色的定制哦!快来加入我们吧。

http://www.biocloudservice.com/home.html