跟着PNAS學作圖:R語言ggplot2作圖展示多序列比對結果

論文

The evidence remains clear: SARS-CoV-2 emerged via the wildlife trade

https://www.pnas.org/doi/10.1073/pnas.2214427119

在 饒毅科學 公衆號 看到的推文 美國科學院院刊:逐條反駁新冠是實驗室產物的錯誤說法

其中有一個圖是

今天的推文我們來試着復現一下這個圖

首先是一個多序列比對文件

讀取數據

df <- phylotools::read.fasta("data/20221126/pnas.fasta") 
df

把序列拆分成一個鹼基一列

df %>% 
  tidyr::separate(seq.text,paste0("col",str_pad(1:28,2,side = "left",pad = "0")),'') %>% 
  select(-col01) %>% 
  mutate(seq.name=factor(seq.name,levels = rev(seq.name))) %>% 
  pivot_longer(!seq.name) -> new.df

這裏有一個問題是序列是27個鹼基,拆分的時候需要指定28列,然後第一列是空的,暫時沒有想明白是爲啥

首先是多序列比對

p1<-new.df %>% 
  ggplot(aes(x=name,y=seq.name))+
  geom_tile(fill="white",alpha=0)+
  geom_text(aes(label=value))+
  theme_bw()+
  theme(axis.text.x = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank(),
        panel.border = element_blank()) 
p1

添加左右兩側的數字

df1<-data.frame(x=0,
                y=11:1,
                label=c(671,668,669,666,744,743,756,736,706,747,759))
df2<-data.frame(x=28,
                y=11:1,
                label=c(695,692,693,690,770,665,777,761,727,768,780))
  
p1+
  geom_text(data=df1,
            aes(x=x,y=y,label=label),
            inherit.aes = FALSE,hjust=1)+
  geom_text(data=df2,
            aes(x=x,y=y,label=label),
            inherit.aes = FALSE,hjust=0)+
  coord_equal(xlim = c(-1,29)) -> p2
p2

在自己感興趣的地方添加背景色

部分示例數據

df3<-readxl::read_excel("data/20221126/data.xlsx")
df3


p2 +
  geom_tile(data=df3,aes(x=x,y=y,fill=group),
            color="white",show.legend = FALSE)+
  geom_text(data=df3,aes(x=x,y=y,label=label),
            color="white")+
  scale_fill_manual(values = c("#00adef","#ed1b24"))+
  labs(x=NULL,y=NULL)

示例數據和代碼可以給推文點贊,點擊在看,最後留言獲取

歡迎大家關注我的公衆號

小明的數據分析筆記本

小明的數據分析筆記本 公衆號 主要分享:1、R語言和python做數據分析和數據可視化的簡單小例子;2、園藝植物相關轉錄組學、基因組學、羣體遺傳學文獻閱讀筆記;3、生物信息學入門學習資料及自己的學習筆記!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章