R包ggseqlogo |绘制序列分析图

简介

在生物信息分析中,经常会做序列分析图(sequence logo),这里的序列指的是核苷酸(DNA/RNA链中)或氨基酸(在蛋白质序列中)。sequence logo图是用来可视化一段序列某个位点的保守性,据根提供的序列组展示位点信息。常用于描述序列特征,如DNA中的蛋白质结合位点或蛋白质中的功能单元。

实现以上可视化过程的工具有很多,本文介绍一个使用起来非常简单,不拖泥带水的R包ggseqlogo,只要你根据此包要求的数据格式上传一堆DNA序列或者氨基酸序列,再根据现成的命令流程就能画出logo图。

安装到作图的代码如下:

安装

安装方式有两种

#直接从CRAN中安装
install.packages("ggseqlogo")
#从GitHub中安装
devtools::install.github("omarwagih/ggseqlogo")

数据加载

ggseqlogo提供了测试数据ggseqlogo_sample

#加载包
library(ggplot2)
library(ggseqlogo)
#加载数据
data(ggseqlogo_sample)

ggseqlogo_sample数据集是一个列表,里面包含了三个数据集:

  • seqs_dna:12种转录因子的结合位点序列

  • pfms_dna:四种转录因子的位置频率矩阵

  • seqs_aa:一组激动酶底物磷酸化位点序列

#seqs_dna
head(seqs_dna)[1]
## $MA0001.1
##  [1] "CCATATATAG" "CCATATATAG" "CCATAAATAG" "CCATAAATAG" "CCATAAATAG"
##  [6] "CCATAAATAG" "CCATAAATAG" "CCATATATGG" "CCATATATGG" "CCAAATATAG"
#pfms_dna
head(pfms_dna)[1]
## $MA0018.2
##   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## A    0    0   11    0    1    0    2    8
## C    1    1    0    9    0    3    7    0
## G    1   10    0    2   10    0    1    1
## T    9    0    0    0    0    8    1    2
#seqs_aa
head(seqs_aa)[1]
## $AKT1
##   [1] "VVGARRSSWRVVSSI" "GPRSRSRSRDRRRKE" "LLCLRRSSLKAYGNG"
##   [4] "TERPRPNTFIIRCLQ" "LSRERVFSEDRARFY" "PSTSRRFSPPSSSLQ"

外部数据读入

也可以用自己的数据集,支持两种格式,序列矩阵

# 长度为7的motif。每一行为一条序列,长度相同,每一列的碱基组成代表对应位置的碱基偏好性。
fasta = "ACGTATG
ATGTATG
ACGTATG
ACATATG
ACGTACG"

fasta_input <- read.table(fasta, header=F, row.names=NULL)
fasta_input <- as.vector(fasta_input$V1)

# 长度为5的motif矩阵示例,每一列代表一个位置,及碱基在该位置的出现次数。共4行,每一行代表一种碱基
matrix <- "Base    1    2    3    4    5
A    10    2    0    8    1
C    1    12    1    2    3
G    4    0    9    1    1
T    0    0    0    1    9
"
matrix_input <- read.table(matrix, header=T, row.names=1)
matrix_input <- as.matrix(matrix_input)

可视化

ggplot()+geom_logo(seqs_dna$MA0001.1)+theme_logo()
image

ggseqlogo提供了一个直接绘图的函数ggseqlogo(),这是一个包装函数。下面命令结果同上面的。

ggseqlogo(seqs_dna$MA0001.1)

输入格式

ggseqlogo支持以下几种类型数据输入:

  • 序列

  • 矩阵

下面是使用数据中的位置频率矩阵生成的seqlogo

ggseqlogo(pfms_dna$MA0018.2)
image

方法

ggseqlogo通过method选项支持两种序列标志生成方法:bitsprobability

p1 <- ggseqlogo(seqs_dna$MA0001.1, method="bits")
p2 <- ggseqlogo(seqs_dna$MA0001.1, method="prob")
gridExtra::grid.arrange(p1,p2)
image

序列类型

ggseqlogo支持氨基酸、DNA和RNA序列类型,默认情况下ggseqlogo会自动识别数据提供的序列类型,也可以通过seq_type选项直接指定序列类型。

ggseqlogo(seqs_aa$AKT1, seq_type="aa")
image

自定义字母

通过namespace选项来定义自己想要的字母类型

#用数字来代替碱基
seqs_numeric <- chartr("ATGC", "1234", seqs_dna$MA0001.1)
ggseqlogo(seqs_numeric, method="prob", namespace=1:4)
image

配色

ggseqlogo可以使用col_scheme参数来设置配色方案,具体可参考?list_col_schemes

ggseqlogo(seqs_dna$MA0001.1, col_scheme="base_pairing")
image

自定义配色

ggseqlogo提供函数make_col_scheme来自定义离散或者连续配色方案

离散配色

csl <- make_col_scheme(chars = c("A","T", "C", "G"), groups = c("gr1","gr1", "gr2","gr2"), cols = c("purple","purple","blue","blue"))
ggseqlogo(seqs_dna$MA0001.1,col_scheme=csl)
image

连续配色

cs2 <- make_col_scheme(chars = c("A", "T", "C", "G"), values = 1:4)
ggseqlogo(seqs_dna$MA0001.1, col_scheme=cs2)
image

同时绘制多个序列标志

ggseqlogo(seqs_dna, ncol = 4)
image

上述命令实际上等同于

ggplot()+geom_logo(seqs_dna)+theme_logo()+  
facet_wrap(~seq_group,ncol = 4,scales = "free_x")

自定义高度

通过创建矩阵可以生成每个标志的高度,还可以有负值高度

set.seed(1234)
custom_mat <- matrix(rnorm(20), nrow = 4, dimnames = list(c("A","T","C", "G")))
ggseqlogo(custom_mat,method="custom",seq_type="dna")+
  ylab("my custom height")
image

字体

可以通过font参数来设置字体,具体可参考?list_fonts

fonts <- list_fonts(F)
p_list <- lapply(fonts, function(f){
  ggseqlogo(seqs_dna$MA0001.1,font=f)+ggtitle(f)
})
do.call(gridExtra::grid.arrange,c(p_list, ncol=4))
image

注释

注释的话跟ggplot2是一样的

ggplot()+
  annotate("rect", xmin = 0.5, xmax = 3.5, ymin = -0.05, ymax = 1.9, alpha=0.1, col="black", fill="yellow")+
  geom_logo(seqs_dna$MA0001.1, stack_width = 0.9)+
  annotate("segment", x=4, xend = 8, y=1.2, yend = 1.2, size=2)+
  annotate("text", x=6, y=1.3, label="Text annotation")+
  theme_logo()
image

图形组合

ggseqlogo生成的图形与ggplot2生成的图形组合在一起。

p1 <- ggseqlogo(seqs_dna$MA0008.1)+theme(axis.text.x = element_blank())
aln <- data.frame(
  letter=strsplit("AGATAAGATGATAAAAAGATAAGA", "")[[1]],
  species=rep(c("a","b","c"), each=8),
  x=rep(1:8,3)
)
aln$mut <- "no"
aln$mut[c(2,15,20,23)]="yes"
p2 <- ggplot(aln, aes(x, species)) +
  geom_text(aes(label=letter, color=mut, size=mut)) +
  scale_x_continuous(breaks=1:10, expand = c(0.105, 0)) + xlab('') +
  scale_color_manual(values=c('black', 'red')) +
  scale_size_manual(values=c(5, 6)) +
  theme_logo() +
  theme(legend.position = 'none', axis.text.x = element_blank())
bp_data <- data.frame(
  x=1:8,
  conservation=sample(1:100, 8)
)
p3 <- ggplot(bp_data, aes(x, conservation))+
  geom_bar(stat = "identity", fill="grey")+
  theme_logo()+
  scale_x_continuous(breaks = 1:10, expand = c(0.105, 0))+
  xlab("")
suppressMessages(require(cowplot))
plot_grid(p1,p2,p3,ncol = 1, align = "v")
image

严涛:浙江大学,作物遗传育种在读博士。爱鼓捣各种可视化软件,爱折腾。点击阅读原文跳转其博客。

更多数据可视化可参考在线工具:http://www.ehbio.com/ImageGP/

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容