R包ggseqlogo |绘制序列分析图
簡介
在生物信息分析中,經(jīng)常會做序列分析圖(sequence logo),這里的序列指的是核苷酸(DNA/RNA鏈中)或氨基酸(在蛋白質序列中)。sequence logo圖是用來可視化一段序列某個位點的保守性,據(jù)根提供的序列組展示位點信息。常用于描述序列特征,如DNA中的蛋白質結合位點或蛋白質中的功能單元。
實現(xiàn)以上可視化過程的工具有很多,本文介紹一個使用起來非常簡單,不拖泥帶水的R包ggseqlogo,只要你根據(jù)此包要求的數(shù)據(jù)格式上傳一堆DNA序列或者氨基酸序列,再根據(jù)現(xiàn)成的命令流程就能畫出logo圖。
安裝到作圖的代碼如下:
安裝
安裝方式有兩種
#直接從CRAN中安裝 install.packages("ggseqlogo") #從GitHub中安裝 devtools::install.github("omarwagih/ggseqlogo")數(shù)據(jù)加載
ggseqlogo提供了測試數(shù)據(jù)ggseqlogo_sample。
#加載包 library(ggplot2) library(ggseqlogo) #加載數(shù)據(jù) data(ggseqlogo_sample)ggseqlogo_sample數(shù)據(jù)集是一個列表,里面包含了三個數(shù)據(jù)集:
-
seqs_dna:12種轉錄因子的結合位點序列
-
pfms_dna:四種轉錄因子的位置頻率矩陣
-
seqs_aa:一組激動酶底物磷酸化位點序列
外部數(shù)據(jù)讀入
也可以用自己的數(shù)據(jù)集,支持兩種格式,序列和**矩陣**。
# 長度為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矩陣示例,每一列代表一個位置,及堿基在該位置的出現(xiàn)次數(shù)。共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()ggseqlogo提供了一個直接繪圖的函數(shù)ggseqlogo(),這是一個包裝函數(shù)。下面命令結果同上面的。
ggseqlogo(seqs_dna$MA0001.1)輸入格式
ggseqlogo支持以下幾種類型數(shù)據(jù)輸入:
-
序列
-
矩陣
下面是使用數(shù)據(jù)中的位置頻率矩陣生成的seqlogo
ggseqlogo(pfms_dna$MA0018.2)方法
ggseqlogo通過method選項支持兩種序列標志生成方法:bits和probability。
p1 <- ggseqlogo(seqs_dna$MA0001.1, method="bits") p2 <- ggseqlogo(seqs_dna$MA0001.1, method="prob") gridExtra::grid.arrange(p1,p2)序列類型
ggseqlogo支持氨基酸、DNA和RNA序列類型,默認情況下ggseqlogo會自動識別數(shù)據(jù)提供的序列類型,也可以通過seq_type選項直接指定序列類型。
ggseqlogo(seqs_aa$AKT1, seq_type="aa")自定義字母
通過namespace選項來定義自己想要的字母類型
#用數(shù)字來代替堿基 seqs_numeric <- chartr("ATGC", "1234", seqs_dna$MA0001.1) ggseqlogo(seqs_numeric, method="prob", namespace=1:4)配色
ggseqlogo可以使用col_scheme參數(shù)來設置配色方案,具體可參考?list_col_schemes
ggseqlogo(seqs_dna$MA0001.1, col_scheme="base_pairing")自定義配色
ggseqlogo提供函數(shù)make_col_scheme來自定義離散或者連續(xù)配色方案
離散配色
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)連續(xù)配色
cs2 <- make_col_scheme(chars = c("A", "T", "C", "G"), values = 1:4) ggseqlogo(seqs_dna$MA0001.1, col_scheme=cs2)同時繪制多個序列標志
ggseqlogo(seqs_dna, ncol = 4)上述命令實際上等同于
ggplot()+geom_logo(seqs_dna)+theme_logo()+ ? facet_wrap(~seq_group,ncol = 4,scales = "free_x")自定義高度
通過創(chuàng)建矩陣可以生成每個標志的高度,還可以有負值高度
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")[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rjr2EXDX-1575035154190)(https://upload-images.jianshu.io/upload_images/7071112-30edfcbcc2326c29?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
字體
可以通過font參數(shù)來設置字體,具體可參考?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))注釋
注釋的話跟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()圖形組合
將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")嚴濤:浙江大學,作物遺傳育種在讀博士。愛鼓搗各種可視化軟件,愛折騰。點擊閱讀原文跳轉其博客。
更多數(shù)據(jù)可視化可參考在線工具:http://www.ehbio.com/ImageGP/
總結
以上是生活随笔為你收集整理的R包ggseqlogo |绘制序列分析图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 27岁华裔小伙搞出美国新冠最准预测模型,
- 下一篇: 送书 | 师妹越多,团队集体智慧越高,当