在一个交流群里看到有人问如下图的做法
这个用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")
如果想要画推文开头的图,自己手头的数据需要有
注释数据的格式
第一列是进化树里的tip label 这个需要完全匹配,因为有的进化树的tiplabel可以会有空格或者特殊字符之类的,这个数据准备的时候需要仔细。如果有很多圈需要注释,依次准备成这个格式就可以了
读取进化树作图
tree<-read.tree("2024.data/20240705/example.tree")
tree
p<-ggtree(tree,layout = "fan",open.angle=0)+
geom_tiplab()
p
第一圈的热图注释
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
如果有更多数据就继续叠加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))
我这边最开始遇到了报错 Error in scale$guide == "none" :
,暂时不知道具体是什么原因。我重新安装了ggnewscale就可以了,应该是ggnewscale版本不匹配;offset的值和图上呈现的空间具体有什么关系暂时没有搞懂。这个参数需要调整好多次,能够调整出来一个比较合适的值
欢迎大家关注我的公众号
小明的数据分析笔记本
小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!