R包ggseqlogo 繪製seq logo圖

2021-03-02 生信寶典
簡介

在生物信息分析中,經常會做序列分析圖(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_dnahead(seqs_dna)[1]

## $MA0001.1##  [1] "CCATATATAG" "CCATATATAG" "CCATAAATAG" "CCATAAATAG" "CCATAAATAG"##  [6] "CCATAAATAG" "CCATAAATAG" "CCATATATGG" "CCATATATGG" "CCAAATATAG"

#pfms_dnahead(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_aahead(seqs_aa)[1]

## $AKT1##   [1] "VVGARRSSWRVVSSI" "GPRSRSRSRDRRRKE" "LLCLRRSSLKAYGNG"##   [4] "TERPRPNTFIIRCLQ" "LSRERVFSEDRARFY" "PSTSRRFSPPSSSLQ"

外部數據讀入

也可以用自己的數據集,支持兩種格式,序列矩陣

# 長度為7的motif。每一行為一條序列,長度相同,每一列的鹼基組成代表對應位置的鹼基偏好性。fasta = "ACGTATGATGTATGACGTATGACATATGACGTACG"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    5A    10    2    0    8    1C    1    12    1    2    3G    4    0    9    1    1T    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提供了一個直接繪圖的函數ggseqlogo(),這是一個包裝函數。下面命令結果同上面的。

ggseqlogo(seqs_dna$MA0001.1)

輸入格式

ggseqlogo支持以下幾種類型數據輸入:

下面是使用數據中的位置頻率矩陣生成的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會自動識別數據提供的序列類型,也可以通過seq_type選項直接指定序列類型。

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

自定義字母

通過namespace選項來定義自己想要的字母類型

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

配色

ggseqlogo可以使用col_scheme參數來設置配色方案,具體可參考?list_col_schemes

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

自定義配色

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)

連續配色

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")

自定義高度

通過創建矩陣可以生成每個標誌的高度,還可以有負值高度

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")

字體

可以通過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))

注釋

注釋的話跟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")


嚴濤:浙江大學,作物遺傳育種在讀博士。愛鼓搗各種可視化軟體,愛折騰。點擊閱讀原文跳轉其博客。

精品回顧

畫圖三字經 生信視頻 生信系列教程 

心得體會 癌症資料庫 Linux Python 

高通量分析 在線畫圖 測序歷史 超級增強子

培訓視頻 PPT EXCEL 文章寫作 

色彩搭配 圖形排版 互作網絡

後臺回復「生信寶典福利第一波」獲取教程合集

(錯誤矯正基金:如果您在閱讀過程中發現文字或命令錯誤,請留言或加小編微信指出,獲取紅包或累積獎勵。希望大家多監督,反饋。適用於所有原創文章。)

相關焦點

  • R語言可視化學習筆記之ggridges包繪製山巒圖
    嚴濤老師的繪圖教程還有:gganimate |諾獎文章裡面的動圖繪製教程來了!!ggplot2學習筆記之圖形排列R包ggseqlogo |繪製序列分析圖ggplot2高效實用指南 (可視化腳本、工具、套路、配色)簡介ggridges包主要用來繪製山巒圖。
  • R語言繪製條形圖
    作者:吳健 中國科學院大學 R語言、統計學愛好者,尤其擅長R語言和Arcgis在生態領域的應用分享個人公眾號:統計與程式語言
  • R-plot3D包: 三維圖表繪製手冊(1)
    # 繪製三維曲面圖,persp(x, y, z, col = color[facetcol], phi = 30, theta = -30)  # 顏色與分箱對應,一個箱體一種顏色x <- seq(-10, 10, length = 30)y <- xf <- function(x, y) {    r <- sqrt(x^2 + y^2)    10 * sin(r)/r}  # 數學公式z <- outer(x, y, f)  # z不是x和y的簡單運算,而是在函數f關係下作外積(向量叉乘
  • 使用R繪製幾種常用的雙坐標軸圖形
    之前公眾號推送了一系列關於使用ggplot2包繪製統計圖形的文章,有網友詢問是否可以繪製雙軸的統計圖形。
  • NBA9大個人經典logo:曼巴標誌霸氣十足,羅斯logo設計走心了
    而一般來說,球星的籤名鞋上都會有品牌商所為他單獨設計的logo,這些logo也逐漸成為這名球員的商業標誌,甚至成為這個球員的代號。今天,過人君便選出9個最具代表性球員的logo,看看哪一個最好看呢? 第9名:保羅-喬治
  • 用R在地圖上繪製網絡圖的三種方法
    作者:嚴濤 浙江大學作物遺傳育種在讀研究生(生物信息學方向)偽碼農,R語言愛好者,愛開源又到了親愛的嚴濤老師時間:諾獎文章裡面的動圖繪製教程來了
  • 如何用AI設計logo?扁平化圖標logo設計案例詳解
    手機應用等扁平化的logo圖標非常漂亮,如何設計呢?非常簡單,今天萬逢春給大家做一遍演示,教大家如何輕鬆搞定扁平化圖標logo設計。第一步,新建文檔,選擇鉛筆工具,繪製圖形,使用平滑 工具拖動滑鼠,使得路徑變得平滑。
  • 【獨家】沉睡三年後,Coach的Logo包回歸了
    特別需要注意的是,在這次的「暗黑童話」風格中,經典C logo顯得格外惹眼。原本自2014年起,它們在Coach的產品中比例明顯下降,如今又登上了包、鞋和成衣。到底是什麼讓這個曾在Coach淡出的設計元素捲土重來呢?
  • ——大牌Logo鎖扣包回歸!
    IT Bag大盤點又和大家見面了~今天要來盤點一波的就是近些年越來越受追捧的logo鎖扣包。大而明顯的logo在大約上個世紀七八十年代時被人們狂熱追求,原因很簡單,那就是最粗暴直接代表品牌的logo是「上等感、奢侈感」和財富地位的具象化,不論是富人階級還是平民百姓,都趨之若鶩的用logo來彰顯自己的品味。
  • logo設計製作基本步驟
    logo代表了形象、品類、消費關係,網站、品牌、公司、店鋪等需要專門設計logo,方便記憶、識別、宣傳,logo的設計過程有哪些?客戶訴求溝通如下:LOGO設計內容:**品牌行業共性定位:文具禮品行業共性產品:筆、紙張、文件袋等體現主題元素:美觀、好用、青春活力設計要求:簡潔大方、易識別、原創、高端行業大佬logo製作過程:一、同行頁logo共性及客戶個性需求
  • 設計不出來logo怎麼辦?這裡6種logo設計方法,分分鐘搞定logo!
    如今的logo設計越來越趨向於簡潔、乾淨、清晰、獨特,簡約的設計更容易讓別人感知,更易被描述、被記住。如何能讓自己設計的logo簡約,又讓人容易識別。添加圖飾添加圖飾logo設計以裝飾手法來達到視覺上的豐富和審美愉悅性,用新的裝飾的細節達到設計上的寬鬆和舒展,使新的裝飾形式的
  • 輕鬆上手用R語言繪製漂亮的維恩圖
    ,貼到報告中,於是上網搜索,找到一大堆工具,好不容易從中選出一個,學會其用法,也把數據成功轉成所需格式,畫出圖來,卻發現還得手動調整各種配色,然後,大半天就過去了……幾次折騰之後,我終於決定自己寫一個R包,來快速且方便地繪製維恩圖。
  • 教你如何用智能logo生成器在線製作logo
    logo設計, 海報設計, 名片設計等等, 曾經只有專業平面設計師才能hold住的東西, 現在不懂ps, 不懂AI的小夥伴都可以完成了。 聽起來是不是很神奇?小編今天就來教教你如何使用智能logo生成器設計logo.
  • 還把LOGO換了!
    初次認識他還是通過那些網絡上鬥圖的呆萌表情包才認識它的。不僅如此,熊本熊官方最近還追加新logo和新的插畫形象what???吉祥物都有logo了?一起來看看吧!新logo就是醬紫滴!所以追加的新logo選用了紅色為主色調,並且用黑色錯位描邊設計使整個logo有種震蕩感,更加的富有活力。會有夥伴疑問為什麼是追加logo?
  • 基於ggplot2包繪製SCI學術散點圖,又是保姆級教程
    本期推文,我們使用ggplot2包繪製學術擬合散點圖。1. 加載數據數據在後臺回復散點圖即可獲取。添加擬合線、圖序號我們通過添加擬合線和圖序號等元素對圖表進行完善,代碼如下:install.packages("ggthemes") # theme_base()函數需要library(ggthemes) # 加載包windowsFonts(myFont1 = windowsFont
  • 公司前臺logo牆怎麼裝修設計?前臺logo牆設計要點(圖)
    進入企業的第一印象往往是企業logo牆,直接給客戶以視覺衝擊,也是體現公司實力與形象的最重要的標準之一,所以企業logo牆不同於普通的隔斷牆,在進行企業logo牆裝修設計時,要充分考慮到她的重要性,施工中要兼顧美觀、穩定、安全。那麼,公司前臺logo牆怎麼裝修設計?
  • logo是什麼意思,為大家解釋logo是什麼,logo作用以及重要性
    logo相信這個詞大家都不會陌生,因為每個公司都有自己logo,每個軟體,網站或者店鋪都有logo,但是不上網的朋友仍然不了解logo是什麼意思,很多人問你要logo的時候往往一頭霧水,今天我們就來為大家介紹一下什麼是logo。
  • 世界著名品牌在logo設計上花了多少錢?
    >圖三:Twitter logo設計投入費用:15美元Twitter從一家名為iStockphoto的網站買來了這個小鳥logo, 而小鳥logo的設計者,一位旅日英國設計師西蒙•歐克斯雷(Simon Oxley),可能只收到了15美元的設計費。Twitter最近對小鳥logo進行了較大的設計調整。
  • 新手怎樣設計logo
    現在很多年輕人想要在網上兼職,工作之餘賺一點外快,而網絡兼職的一個重大領域就是創意設計類,其中logo設計尤為火爆,接下來就為大家講一下怎麼設計一個logo。在設計一個logo之前,你首先要學習並熟練掌握photoshop,illustrator,這是最正規的logo設計軟體。
  • LOGO設計公司:好LOGO的七大標準
    LOGO設計要有關聯性設計的logo應當符合客戶的業務屬性,如果為一名律師設計logo,那就應當摒棄任何不嚴肅的元素。如果為一個視頻網站設計logo,那就要體現視頻的屬性;對於一個白血病組織來說,設計一個笑臉可不是什麼好主意。設計的logo應該跟客戶的行業、面向的群體相關,要了解這些方面需要花時間深入調查。