R包ggtreeExtra繪制進(jìn)化樹
引言
ggplot2提供的geom_tile圖層可以畫熱圖了,ggplot2的geom_point或者ggstar的geom_star可以繪制點(diǎn)圖層。為了擴(kuò)展ggtree在點(diǎn)和布局中的系統(tǒng)發(fā)育樹的外環(huán)上呈現(xiàn)相關(guān)數(shù)據(jù),開發(fā)的ggtreeExtra包提供了一個函數(shù),geom_fruit用于將圖形與樹對齊,相關(guān)圖表將在樹的外部面板的不同位置對齊。還開發(fā)geom_fruit_list在樹的同一個外部面板上添加多個層。一些函數(shù)基于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) # 設(shè)置疊加的包 library(ggstar) # 提供幾何圖形 library(ggplot2) # library(ggtree) # 繪制進(jìn)化樹 library(treeio) library(ggnewscale) # 創(chuàng)建新的scale,多個fill或者color
3、設(shè)置工作目錄
setwd("D:/R/ggtreeExtra")
4、數(shù)據(jù)來源
# 樹狀圖數(shù)據(jù)來源路徑
trfile <- system.file("extdata", "tree.nwk", package="ggtreeExtra")
# 繪制點(diǎn)圖和柱狀圖的數(shù)據(jù)來源路徑
tippoint1 <- system.file("extdata", "tree_tippoint_bar.csv", package="ggtreeExtra")
# 樹外第一層的繪制熱圖來數(shù)據(jù)源路徑
ring1 <- system.file("extdata", "first_ring_discrete.csv", package="ggtreeExtra")
# 樹外第二層的繪制熱圖來數(shù)據(jù)源路徑
ring2 <- system.file("extdata", "second_ring_continuous.csv", package="ggtreeExtra")
5、獲取數(shù)據(jù)
樹文件是使用 read . tree 導(dǎo)入的。如果有其他樹格式的文件,可以使用 tree io 包的相應(yīng)函數(shù)來讀取.
tree <- read.tree(trfile) data = fortify(tree) head(data)

6、繪制樹狀圖
# 可視化進(jìn)化樹,這里圖形選用的是"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、獲取數(shù)據(jù)集繪制圖
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數(shù)據(jù)集用來繪制成點(diǎn)和條形圖

dat2數(shù)據(jù)集用于繪制熱圖

dat3數(shù)據(jù)集用于繪制熱圖

a、繪制點(diǎn)圖層
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, # 外部層之間的距離,默認(rèn)為樹的 x 范圍的0.03倍。
pwidth=0.25 # 外部層的寬度,默認(rèn)為樹的 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 # 調(diào)整文字軸的水平位置
)
) +
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 # 調(diào)整軸文本的水平位置
),
grid.params=list() # 添加外部條形圖的網(wǎng)格線
) +
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), # 圖例標(biāo)題大小
legend.text=element_text(size=6), # 圖例文本標(biāo)簽大小
legend.spacing.y = unit(0.02, "cm") # 調(diào)節(jié)y軸圖例的距離
)
p5

以上就是R包ggtreeExtra繪制進(jìn)化樹的詳細(xì)內(nèi)容,更多關(guān)于R包ggtreeExtra繪制進(jìn)化樹的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
R語言 實(shí)現(xiàn)手動設(shè)置xy軸刻度的操作
這篇文章主要介紹了R語言 實(shí)現(xiàn)手動設(shè)置xy軸刻度的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
R語言 實(shí)現(xiàn)將數(shù)據(jù)框中的字符類型數(shù)字轉(zhuǎn)換為數(shù)值
這篇文章主要介紹了R語言 實(shí)現(xiàn)將數(shù)據(jù)框中的字符類型數(shù)字轉(zhuǎn)換為數(shù)值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
R語言中corrplot標(biāo)題居中及eps格式輸出
由于論文的需要,很多R語言繪圖需要eps格式矢量圖的方式進(jìn)行輸出,同時最近也需要繪制相關(guān)性圖,因此決定寫個博客作為記錄,有需要的朋友可以借鑒參考下2021-11-11
R語言數(shù)據(jù)可視化繪圖Dot plot點(diǎn)圖畫法示例
這篇文章主要為大家介紹了R語言數(shù)據(jù)可視化繪圖Dot plot點(diǎn)圖的畫法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02

