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其它相關文章!

推薦閱讀: