前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >序列LOGO绘制-你还需要美颜?

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

作者头像
作图丫
发布2022-03-29 14:15:49
1.1K0
发布2022-03-29 14:15:49
举报
文章被收录于专栏:作图丫

之前在公众号中分享过绘制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包说明文档写得也很详细,在这里推荐给大家,快来试试看吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作图丫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 加载R包和测试数据
  • 先来看下"ggplot2"和"ggseqlogo"绘制logo
  • 自定义序列类型
  • 预设颜色
  • 自定义颜色
  • 多序列logo绘图
  • 字体设置
  • logos 注释
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档