R包ggtreeExtra繪制進化樹
引言
ggplot2提供的geom_tile圖層可以畫熱圖瞭,ggplot2的geom_point或者ggstar的geom_star可以繪制點圖層。為瞭擴展ggtree在點和佈局中的系統發育樹的外環上呈現相關數據,開發的ggtreeExtra包提供瞭一個函數,geom_fruit用於將圖形與樹對齊,相關圖表將在樹的外部面板的不同位置對齊。還開發geom_fruit_list在樹的同一個外部面板上添加多個層。一些函數基於ggplot2並支持使用圖形語法。
繪圖示例
1、下載安裝ggtreeExtra包
if(!requireNamespace("remotes", quietly=TRUE)){ install.packages("remotes") } remotes::install_github("YuLab-SMU/ggtreeExtra") if (!requireNamespace("BiocManager", quietly=TRUE)) install.packages("BiocManager") BiocManager::install("ggtreeExtra") BiocManager::install("ggstar") # 下載"ggstar","ggplot2","ggtree","treeio","ggnewscale"包 install.packages("ggstar") install.packages("ggplot2") install.packages("ggtree") install.packages("treeio") install.packages("ggnewscale")
2、加載依賴包
library(ggtreeExtra) # 設置疊加的包 library(ggstar) # 提供幾何圖形 library(ggplot2) # library(ggtree) # 繪制進化樹 library(treeio) library(ggnewscale) # 創建新的scale,多個fill或者color
3、設置工作目錄
setwd("D:/R/ggtreeExtra")
4、數據來源
# 樹狀圖數據來源路徑 trfile <- system.file("extdata", "tree.nwk", package="ggtreeExtra") # 繪制點圖和柱狀圖的數據來源路徑 tippoint1 <- system.file("extdata", "tree_tippoint_bar.csv", package="ggtreeExtra") # 樹外第一層的繪制熱圖來數據源路徑 ring1 <- system.file("extdata", "first_ring_discrete.csv", package="ggtreeExtra") # 樹外第二層的繪制熱圖來數據源路徑 ring2 <- system.file("extdata", "second_ring_continuous.csv", package="ggtreeExtra")
5、獲取數據
樹文件是使用 read . tree 導入的。如果有其他樹格式的文件,可以使用 tree io 包的相應函數來讀取.
tree <- read.tree(trfile) data = fortify(tree) head(data)
6、繪制樹狀圖
# 可視化進化樹,這裡圖形選用的是"fan",還可以是 'rectangular', 'dendrogram', 'slanted', 'ellipse', 'roundrect', 'circular', 'circular', 'inward_circular', 'radial', 'equal_angle', 'daylight' or 'ape' p <- ggtree(tree, layout="fan", open.angle=10, size=0.5) p
7、獲取數據集繪制圖
dat1 <- read.csv(tippoint1) knitr::kable(head(dat1)) dat2 <- read.csv(ring1) knitr::kable(head(dat2)) dat3 <-read.csv(ring2) knitr::kable(head(dat3)) head(dat3)
dat1數據集用來繪制成點和條形圖
dat2數據集用於繪制熱圖
dat3數據集用於繪制熱圖
a、繪制點圖層
p2 <- p + geom_fruit( data=dat1, geom=geom_star, mapping=aes(y=ID, fill=Location, size=Length, starshape=Group), position="identity", starstroke=0.2 ) + scale_size_continuous( range=c(1, 3), # 大小范圍 guide=guide_legend( keywidth=0.5, # 箱體寬度0.5 Keyheight=0.5, # 箱體寬度0.5 override.aes=list(starshape=15), order=2 ) ) + scale_fill_manual( values=c("#F8766D", "#C49A00", "#53B400", "#00C094", "#00B6EB", "#A58AFF", "#FB61D7"), guide="none" ) + scale_starshape_manual( values=c(1, 15), guide=guide_legend( keywidth=0.5, keyheight=0.5, order=1 ) ) p2
b、繪制熱圖層
p3 <- p2 + new_scale_fill() + geom_fruit( data=dat2, geom=geom_tile, mapping=aes(y=ID, x=Pos, fill=Type), offset=0.08, # 外部層之間的距離,默認為樹的 x 范圍的0.03倍。 pwidth=0.25 # 外部層的寬度,默認為樹的 x 范圍的0.2倍。 ) + scale_fill_manual( values=c("#339933", "#dfac03"), guide=guide_legend( keywidth=0.5, keyheight=0.5, order=3 ) ) p3
c、繪制熱圖層
p4 <- p3 + new_scale_fill() + geom_fruit( data=dat3, geom=geom_tile, mapping=aes(y=ID, x=Type2, alpha=Alpha, fill=Type2), pwidth=0.15, axis.params=list( axis="x", # 添加圖層的軸文本 text.angle=-45, #x 軸的文本角度 hjust=0 # 調整文字軸的水平位置 ) ) + scale_fill_manual( values=c("#b22222", "#005500", "#0000be", "#9f1f9f"), guide=guide_legend(keywidth=0.5, keyheight=0.5, order=4) ) + scale_alpha_continuous( range=c(0, 0.4), # alpha的范圍 guide=guide_legend(keywidth=0.5, keyheight=0.5, order=5) ) p4
d、繪制柱狀圖層
p5 <- p4 + new_scale_fill() + geom_fruit( data=dat1, geom=geom_bar, mapping=aes(y=ID, x=Abundance, fill=Location), # dat 1的Abundance將被映射到 x pwidth=0.4, stat="identity", orientation="y", # 軸的方向 axis.params=list( axis="x", # 添加圖層的軸文本 text.angle=-45, # 軸的文字大小 hjust=0 # 調整軸文本的水平位置 ), grid.params=list() # 添加外部條形圖的網格線 ) + scale_fill_manual( values=c("#F8766D", "#C49A00", "#53B400", "#00C094", "#00B6EB", "#A58AFF", "#FB61D7"), guide=guide_legend(keywidth=0.5, keyheight=0.5, order=6) ) + theme(#legend.position=c(0.96, 0.5), # 圖例位置 legend.background=element_rect(fill=NA), # 圖例背景 legend.title=element_text(size=7), # 圖例標題大小 legend.text=element_text(size=6), # 圖例文本標簽大小 legend.spacing.y = unit(0.02, "cm") # 調節y軸圖例的距離 ) p5
以上就是R包ggtreeExtra繪制進化樹的詳細內容,更多關於R包ggtreeExtra繪制進化樹的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- R語言繪制Vonoroi圖的完整代碼
- R語言學習ggplot2繪制統計圖形包全面詳解
- R語言使用ggplot繪制畫中畫細節放大的方法
- R語言數據可視化ggplot添加左右y軸繪制天貓雙十一銷售圖
- R語言數據可視化ggplot繪制置信區間與分組繪圖技巧