之前在公众号中分享过绘制LOGO的R包"gglogo",详情请戳蓝字“绘制序列标识图-gglogo”。今天再给大家分享一个R包-"ggseqlogo",绘制序列LOGO完全无需美颜。这个R包是ggplot2的扩展包,应用起来简单明了,下边就给大家详细测试下,看看是不是那么美,那么好!
R包安装
#CRAN安装
install.packages("ggseqlogo")
#使用 devtools package 安装
devtools::install_github("omarwagih/ggseqlogo")
# Load the required packages
require(ggplot2)
require(ggseqlogo)
# Some sample data
data(ggseqlogo_sample)
ggseqlogo_sample含有三个数据集
seqs_dna
: sets of binding sites for 12 transcription factors obtained from FASTA files in JASPAR. This is represented as a named list of character vectors, where the names represent the JASPAR ID.pfms_dna
: a list of position frequency matrices for four transcription factors obtained from JASPAR. This is represented as a list of matrices, where the names represent the JASPAR ID.seqs_aa
: sets of kinase-substrate phosphorylation sites obtained from Wagih et al. This is represented as a named list of character vectors where the names represent the names of the kinases associated with the phosphosites.
#利用ggplot2绘图
ggplot() + geom_logo(data=seqs_dna$MA0001.1, method="probability") + theme_logo()
#ggseqlogo简化代码
ggseqlogo(seqs_dna$MA0001.1,
method="bits", #位置保守性展示方法,包含"bits" 和 "probability",默认"bits"
seq_type = "auto", #序列类型,包含"aa", "dna", "rna" or "other" 默认是"auto"
stack_width= 0.95, #字符宽度,默认0.95
)
可以看出"ggseqlogo"很简单明了。
两大类数据类型
matrix数据示例
pfms_dna$MA0018.2 数据具体如下所示:
#matrix数据绘图
ggseqlogo(pfms_dna$MA0018.2)
"ggseqlogo"支持两个绘制序列方法: "bits" 和 "probability"。
p1 = ggseqlogo( seqs_dna$MA0001.1, method = 'bits' ) #bits
p2 = ggseqlogo( seqs_dna$MA0001.1, method = 'prob' ) #prob
gridExtra::grid.arrange(p1, p2)
预设序列类型
"ggseqlogo"支持氨基酸、DNA和RNA序列类型。默认情况下,"gseqlogo"将尝试猜测序列类型。可以通过seq_type选项显式设置序列类型。
#seq_type='aa' 和 seq_type='auto' 绘制的结果是一样的
ggseqlogo( seqs_aa$AKT1, seq_type='aa')
ggseqlogo( seqs_aa$AKT1, seq_type='auto')
通过namespace
定义.
# 利用“1234”替换“ATGC”
seqs_numeric = chartr('ATGC','1234', seqs_dna$MA0001.1)
# 设置namespace,利用替换后的序列绘图
ggseqlogo(seqs_numeric, method='p', namespace=1:4)
当然也是可以设置其他的替换字符,有兴趣的可以替换试试。
"ggseqlogo"基于不同的序列类型给予不同的颜色配置,对于氨基酸序列可选“chemistry, hydrophobicity, clustalx, taylor” 。对于 DNA 和 RNA 可选 nucleotide 和 base_pairin。
ggseqlogo(seqs_dna$MA0001.1, col_scheme='base_pairing')
可以使用 make_col_scheme
进行颜色自定义。
离散颜色
# 创建自定义颜色
cs1 = make_col_scheme(chars=c('A', 'T', 'C', 'G'), #序列编码
groups=c('gr1', 'gr1', 'gr2', 'gr2'), #分组,可选
cols=c('purple','purple','blue','blue')#设置颜色
)
# 绘制logo
ggseqlogo(seqs_dna$MA0001.1, col_scheme=cs1)
连续配色
# 创建自定义颜色
cs2 = make_col_scheme(chars=c('A', 'T', 'C', 'G'), values=1:4)
# 绘制序列logo
ggseqlogo(seqs_dna$MA0001.1, col_scheme=cs2)
在facet的帮助下,可以同时绘制多个序列标识。"ggseqlogo"将接受序列或矩阵的命名列表。列表的名称将用作facet标题。
ggseqlogo(seqs_dna, ncol=4) #ncol为每行的列数
自定义序列编码高度
可对每个编码高度度量进行定义,只需创建一个矩阵,其中每个单元格都是所需的高度,并将该方法设置为custom。甚至可以有负的高度也是可以的。
# 创建高度矩阵
set.seed(123)
custom_mat = matrix( rnorm(20), nrow=4, dimnames=list(c('A', 'T', 'G', 'C')))
# 绘制序列logo
ggseqlogo(custom_mat, method='custom', seq_type='dna') + ylab('my custom height')
您可以通过设置“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=2))
在ggseqlogo中,用ggplot2将注释覆盖到序列标志上是很简单的。下面是一个绘制矩形、直线和文本的例子。
ggplot() +
annotate('rect', xmin = 0.5, xmax = 3.5, ymin = -0.05, ymax = 1.9, alpha = .1, col='black', fill='yellow') +
geom_logo(seqs_dna$MA0001.1, stack_width = 0.90) +
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()
绘图整合
# 序列
seqs = seqs_dna$MA0008.1
# 绘制logo
p1 = ggseqlogo(seqs) + 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())
# 绘制bar
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('')
# 使用cowplot整合绘图,确保P1、P2和 P3对应
suppressMessages(require(cowplot) )
plot_grid(p1, p2, p3, ncol = 1, align = 'v')
小编总结
"ggseqlogo"这个R包小编测试的时候无论是配色还是代码方面都是比较让人舒服和满意的,可见作者在编写的过程中还是很用心的,R包说明文档写得也很详细,在这里推荐给大家,快来试试看吧!