R语言ggtreeExtra给环形进化树添加热图注释

R语言 R语言 797 人阅读 | 0 人回复 | 2024-07-05

在一个交流群里看到有人问如下图的做法

image.png

这个用R语言的ggtree加ggtreeExtra可以很方便的实现

可以参考这个链接

https://bioconductor.org/packages/devel/bioc/vignettes/ggtreeExtra/inst/doc/ggtreeExtra.html

ggtree和ggtreeExtra的安装需要用BiocManager

关于ggtree的安装我之前录制过视频介绍,可以去翻翻我的B站 小明的数据分析笔记本

构造数据集的代码

library(ggtree)
library(ggplot2)
library(ggtreeExtra)

rtree(30) -> tree

?rtree

dat01<-data.frame(y=paste0("t",1:30),
                  group01=sample(c("A","B"),30,replace = TRUE))

dat01

dat02<-data.frame(y=paste0("t",1:30),
                  group02=sample(c("BB","AA","DD"),30,replace = TRUE))

dat02

dat03<-data.frame(y=paste0("t",1:30),
                  group02=sample(1:100,30,replace = TRUE))

dat03

treeio::write.tree(tree,file = "2024.data/20240705/example.tree")
readr::write_csv(dat01,file = "2024.data/20240705/annoTree01.csv")
readr::write_csv(dat02,file = "2024.data/20240705/annoTree02.csv")
readr::write_csv(dat03,file = "2024.data/20240705/annoTree03.csv")

如果想要画推文开头的图,自己手头的数据需要有

  • 1 进化树
  • 2 注释数据

注释数据的格式

image.png

第一列是进化树里的tip label 这个需要完全匹配,因为有的进化树的tiplabel可以会有空格或者特殊字符之类的,这个数据准备的时候需要仔细。如果有很多圈需要注释,依次准备成这个格式就可以了

读取进化树作图

tree<-read.tree("2024.data/20240705/example.tree")
tree

p<-ggtree(tree,layout = "fan",open.angle=0)+
  geom_tiplab()
p

image.png

第一圈的热图注释

library(tidyverse)
dat01<-read_csv("2024.data/20240705/annoTree01.csv")
p+
  geom_fruit(data = dat01,
             geom = geom_tile,
             aes(y=y,fill=group01),
             color="black",offset = 0.1)+
  scale_fill_manual(values = c("#e59f01","#56b4e8"))+
  ggnewscale::new_scale_fill() -> p1
p1

image.png

如果有更多数据就继续叠加geom_fruit()代码就可以

p1+
  geom_fruit(data = dat03,
             geom = geom_tile,
             aes(y=y,fill=group03),
             color="black",offset = 0.1)+
  scale_fill_material_c(guide=guide_legend(order=1))+
  new_scale_fill() -> p2

p2

p2+geom_fruit(data = dat02,
              geom = geom_tile,
              aes(y=y,fill=group02),
              color="black",offset = 0.2)+
  scale_fill_manual(values = c("#0072b1","#d55e00","#cc79a7"),
                    guide=guide_legend(order=2))

image.png

我这边最开始遇到了报错 Error in scale$guide == "none" :,暂时不知道具体是什么原因。我重新安装了ggnewscale就可以了,应该是ggnewscale版本不匹配;offset的值和图上呈现的空间具体有什么关系暂时没有搞懂。这个参数需要调整好多次,能够调整出来一个比较合适的值

image.png

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

微信扫一扫分享文章

+10
无需登陆也可“点赞”支持作者
分享到:
评论

使用道具 举报

热门推荐