序列LOGO绘制-你还需要美颜?

2022-03-29 14:15:49 浏览数 (2)

之前在公众号中分享过绘制LOGO的R包"gglogo",详情请戳蓝字“绘制序列标识图-gglogo”。今天再给大家分享一个R包-"ggseqlogo",绘制序列LOGO完全无需美颜。这个R包是ggplot2的扩展包,应用起来简单明了,下边就给大家详细测试下,看看是不是那么美,那么好!

R包安装

代码语言:javascript复制
#CRAN安装
install.packages("ggseqlogo")
代码语言:javascript复制
#使用 devtools package 安装
devtools::install_github("omarwagih/ggseqlogo")

加载R包和测试数据

代码语言:javascript复制
# 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"和"ggseqlogo"绘制logo

代码语言:javascript复制
#利用ggplot2绘图
ggplot()   geom_logo(data=seqs_dna$MA0001.1, method="probability")   theme_logo()
代码语言:javascript复制
#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"很简单明了。

两大类数据类型

  1. Sequences: a character vector of aligned sequences
  2. Matrices: a position frequency matrix, where the row is the letter, and column is the position. Note: the matrix must be row named with the letter. Matrices can also be a custom height matrix, but this is described later in the tutorial

matrix数据示例

pfms_dna$MA0018.2 数据具体如下所示:

代码语言:javascript复制
#matrix数据绘图
ggseqlogo(pfms_dna$MA0018.2)

"ggseqlogo"支持两个绘制序列方法: "bits" 和 "probability"。

代码语言:javascript复制
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选项显式设置序列类型。

代码语言:javascript复制
#seq_type='aa' 和 seq_type='auto' 绘制的结果是一样的
ggseqlogo( seqs_aa$AKT1, seq_type='aa')
ggseqlogo( seqs_aa$AKT1, seq_type='auto')

自定义序列类型

通过namespace 定义.

代码语言:javascript复制
# 利用“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。

代码语言:javascript复制
ggseqlogo(seqs_dna$MA0001.1, col_scheme='base_pairing')

自定义颜色

可以使用 make_col_scheme 进行颜色自定义。

离散颜色

代码语言:javascript复制
# 创建自定义颜色
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)

连续配色

代码语言:javascript复制
# 创建自定义颜色
cs2 = make_col_scheme(chars=c('A', 'T', 'C', 'G'), values=1:4)
# 绘制序列logo
ggseqlogo(seqs_dna$MA0001.1, col_scheme=cs2)

多序列logo绘图

在facet的帮助下,可以同时绘制多个序列标识。"ggseqlogo"将接受序列或矩阵的命名列表。列表的名称将用作facet标题。

代码语言:javascript复制
ggseqlogo(seqs_dna, ncol=4) #ncol为每行的列数

自定义序列编码高度

可对每个编码高度度量进行定义,只需创建一个矩阵,其中每个单元格都是所需的高度,并将该方法设置为custom。甚至可以有负的高度也是可以的。

代码语言:javascript复制
# 创建高度矩阵
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函数。

代码语言:javascript复制
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))

logos 注释

在ggseqlogo中,用ggplot2将注释覆盖到序列标志上是很简单的。下面是一个绘制矩形、直线和文本的例子。

代码语言:javascript复制
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()

绘图整合

代码语言:javascript复制
# 序列
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包说明文档写得也很详细,在这里推荐给大家,快来试试看吧!

0 人点赞