跟著NatureGenetics學(xué)作圖:R語言ggplot2做進(jìn)化樹圖及添加不同形狀的背景色塊

論文

Reference genome assemblies reveal the origin and evolution of allohexaploid oat

https://www.nature.com/articles/s41588-022-01127-7#Sec31

論文中公開的數(shù)據(jù)處理流程

論文里還公布了所有圖的原始數(shù)據(jù)赡突,我們可以試著用論文中的原始數(shù)據(jù)來模仿出論文中的圖

今天的推文我們來重復(fù)一下論文中的Figure3b 中的第一個樹狀圖

image.png

ggtree所有樹的布局

image.png

https://yulab-smu.top/treedata-book/chapter4.html

和論文中比較像的布局是 dayight這個布局

使用ggtree作圖的時候

ggtree(tree01,layout = "daylight")+
  geom_tiplab()

使用daylight這個布局一直報錯

Error: C stack usage 15924720 is too close to the limit

我現(xiàn)在用的R是4.0.3
換成4.1版本的R就沒有這個問題

讀取樹文件

library(ggtree)
library(ggplot2)
library(ggforce)

vert.tree<-read.tree("data/20220725/tree01.nwk")

作圖的時候最方便就是直接使用ggtree

ggtree(vert.tree)

ggtree(vert.tree,layout = "daylight")+
  geom_tiplab() -> p

ggtree(vert.tree,layout = "daylight")+
  geom_nodelab(aes(label=node))

p+geom_nodelab(aes(label=node))

p+geom_highlight(node=15,expand=0.01)

p+geom_highlight(node=15)+
  xlim(-0.15,0.1)+ylim(-0.1,0.2)

但是有些細(xì)節(jié)調(diào)整起來我還不清楚劫乱,最終出圖效果如下

image.png

目前能想到的辦法是

把作圖數(shù)據(jù)單獨(dú)提取出來,然后用ggplot2操作

ggplot_build(p)$data[[1]] -> df1

ggplot_build(p)$data[[2]] -> df2

ggplot_build(p)$data[[3]] -> df3

作圖代碼

ggplot()+
  geom_segment(data=df1,
               aes(x=x,y=y,xend=xend,yend=yend))+
  geom_text(data=df2,aes(x=x,y=y,
                         label=label,
                         angle=angle,
                         hjust=hjust,
                         vjust=vjust))+
  geom_text(data=df3,aes(x=x,y=y,
                         label=label,
                         angle=angle,
                         hjust=hjust,
                         vjust=vjust))+
  xlim(-0.15,0.1)+ylim(-0.1,0.2)+
  geom_mark_hull(data=data.frame(x=c(0.025,0.1,0.1,0.07),
                                 y=c(0.08,0.15,0.02,0.02)),
                 aes(x=x,y=y),
                 fill="red",
                 color="transparent",
                 #con.colour="white",
                 expand = unit(5,'mm'),
                 radius = unit(15,'mm'))+
  geom_mark_hull(data=data.frame(x=c(-0.05,-0.12,-0.15,-0.08,-0.13),
                                 y=c(0.08,0.15,0.08,-0.02,0.02)),
                 aes(x=x,y=y),
                 fill="blue",
                 color="transparent")+
  geom_mark_hull(data=data.frame(x=c(-0.025,0.02,0.075),
                                 y=c(-0.08,0.05,0)),
                 aes(x=x,y=y),
                 fill="orange",
                 color="transparent",
                 expand = unit(0,'mm'))+
  geom_mark_hull(data=data.frame(x=c(0,0,0.06),
                                 y=c(0.125,0.2,0.14)),
                 aes(x=x,y=y),
                 fill="darkgreen",
                 color="transparent",
                 expand = unit(3,'mm')) -> p1

p1

image.png

這里添加色塊用到的函數(shù)是ggforce包中的geom_mark_hull()函數(shù)牡整,這里比較麻煩的是還需要自己手動計算色塊的邊界坐標(biāo)枫慷,算這些坐標(biāo)還挺費(fèi)時間的膛腐,還有一個問題是如何給色塊添加漸變色

拼圖

library(patchwork)

p1+p1+theme_void()
image.png

示例數(shù)據(jù)和代碼可以自己到論文中獲取遗增,或者給本篇推文點(diǎn)贊张咳,點(diǎn)擊在看帝洪,然后留言獲取

歡迎大家關(guān)注我的公眾號

小明的數(shù)據(jù)分析筆記本

小明的數(shù)據(jù)分析筆記本 公眾號 主要分享:1、R語言和python做數(shù)據(jù)分析和數(shù)據(jù)可視化的簡單小例子脚猾;2葱峡、園藝植物相關(guān)轉(zhuǎn)錄組學(xué)、基因組學(xué)龙助、群體遺傳學(xué)文獻(xiàn)閱讀筆記砰奕;3、生物信息學(xué)入門學(xué)習(xí)資料及自己的學(xué)習(xí)筆記提鸟!

處理論文中進(jìn)化樹文件遇到的報錯

論文中提供的數(shù)據(jù)是excel存儲的军援,首先把進(jìn)化樹的內(nèi)容復(fù)制到一個文本文件里

讀取樹文件

library(ggtree)
read.tree("data/20220725/tree01.nwk")

遇到報錯

Error in nchar(tree) : invalid multibyte string, element 1

查了一下報錯,有人提到可能是字符編碼問題

https://community.rstudio.com/t/problem-importing-csv-file-in-r-error-in-make-names-x-invalid-multibyte-string-1/72802/2

使用readLines()函數(shù)讀取的話可以 看到有一個字符是亂碼

readLines("data/20220725/tree01.nwk")
image.png

對應(yīng)著到進(jìn)化樹中去看發(fā)現(xiàn)其是用減號鏈接的字符沽一,這樣可能不行盖溺?

image.png

對應(yīng)著把這個減號改成下劃線就好了,如果確實(shí)想在圖上體現(xiàn)這個減號,可以出圖后再編輯

然后讀取

read.tree("data/20220725/tree01.nwk")

又遇到報錯

Error in FUN(X[[i]], ...) : 
  numbers of left and right parentheses in Newick string not equal

報錯的意思就是進(jìn)化樹里的半括號數(shù)不匹配

搜索找到 參考

https://github.com/YuLab-SMU/ggtree/issues/432

有人說可能是進(jìn)化樹的文本標(biāo)簽 里有分號铣缠,我搜了一下我的沒有

統(tǒng)計一下半括號的數(shù)量

readLines("data/20220725/Figure3b_1.txt") %>% 
  str_count("\\(")

readLines("data/20220725/Figure3b_1.txt") %>% 
  str_count("\\)")

一個13 一個14 確實(shí)不匹配

暫時想不到如何用代碼去找是哪個括號多了烘嘱,只能一個一個看了昆禽,還好進(jìn)化樹文件不多

把枝長信息去掉

readLines("data/20220725/Figure3b_1.txt") %>% 
  str_replace_all(":0.[0-9]+","")

把結(jié)果

((AbarCN65538_AB,(((Asat_Ogle_ACD_A,Sanfensan_ACD_A),(AlonCN58139_Al,AlonCN58138_Al)),((((AinsINS_4_CD_D,AinsCN108634_CD_D),AmarCN57945_CD_D),AmurCN21989_CD_D),(AagaCN25869_AB,(AcanCN23017_Ac,AdamCN19457_Ad)))))),(AnudCN58062_As,AstrCN88610_As),AwieCN90217_As);

放到rstudio寫代碼的地方,遇到逗號就換行蝇庭,就能夠找到多的那個右括號

但實(shí)際應(yīng)該是少了一個左括號醉鳖,在文件的最左邊添加上就可以了

可能是在將樹文件復(fù)制到excel的時候少選了一個左邊的括號?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哮内,一起剝皮案震驚了整個濱河市盗棵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌北发,老刑警劉巖纹因,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異琳拨,居然都是意外死亡瞭恰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門狱庇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惊畏,“玉大人,你說我怎么就攤上這事密任⊙掌簦” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵浪讳,是天一觀的道長缰盏。 經(jīng)常有香客問我,道長驻债,這世上最難降的妖魔是什么乳规? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮合呐,結(jié)果婚禮上暮的,老公的妹妹穿的比我還像新娘。我一直安慰自己淌实,他們只是感情好冻辩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拆祈,像睡著了一般恨闪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上放坏,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天咙咽,我揣著相機(jī)與錄音,去河邊找鬼淤年。 笑死钧敞,一個胖子當(dāng)著我的面吹牛蜡豹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溉苛,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼镜廉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了愚战?” 一聲冷哼從身側(cè)響起娇唯,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寂玲,沒想到半個月后塔插,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敢茁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年佑淀,在試婚紗的時候發(fā)現(xiàn)自己被綠了留美。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彰檬。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谎砾,靈堂內(nèi)的尸體忽然破棺而出逢倍,到底是詐尸還是另有隱情,我是刑警寧澤景图,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布较雕,位于F島的核電站,受9級特大地震影響挚币,放射性物質(zhì)發(fā)生泄漏亮蒋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一妆毕、第九天 我趴在偏房一處隱蔽的房頂上張望慎玖。 院中可真熱鬧,春花似錦笛粘、人聲如沸趁怔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽润努。三九已至,卻和暖如春示括,著一層夾襖步出監(jiān)牢的瞬間铺浇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工垛膝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳍侣,地道東北人裁着。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像拱她,于是被迫代替她去往敵國和親二驰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容