image.png
有读者在公众号留言问这个图的实现办法,今天的推文介绍一下这个图的R语言实现代码
这个图示物种的进化树,热图展示的是kaks的值
首先是进化树的数据
image.png
nwk格式的树文件
还有一个物种的分组文件
image.png
加载用到的R包
代码语言:javascript复制library(ggtree)
library(treeio)
library(readxl)
library(ggplot2)
library(tidyverse)
library(patchwork)
library(see)
左侧进化树作图
代码语言:javascript复制tree<-read.tree("sample.nwk")
tip.group<-read.csv("sample_group.csv")
tip.group
tree.a<-full_join(tree,tip.group,by="label")
as_tibble(tree.a) %>%
as.data.frame()
p1<-ggtree(tree.a,
branch.length = "none",
aes(color=group))
geom_tiplab(offset = 0.1)
theme(legend.position = "none")
scale_y_reverse()
scale_color_manual(values = c("#cc340c",
"#13a983",
"#3f60aa"),
na.value="black")
p1
image.png
热图数据
image.png
热图作图代码
代码语言:javascript复制df<-read_excel("example.xlsx")
df %>% pivot_longer(!sample,
names_to = "sample1",
values_to = "kaks") -> df1
df1$sample<-factor(df1$sample,
levels = rev(df$sample))
df1$sample1<-factor(df1$sample1,
levels = df$sample)
p2<-ggplot(data=na.omit(df1),aes(x=sample,y=sample1))
geom_tile(aes(fill=kaks),color="grey")
scale_fill_bluebrown_c()
p2
df1 %>%
filter(sample == sample1) -> df2
p2
geom_tile(data=df2,aes(x=sample,
y=sample1),
fill="white",color="grey")
#theme_void()
theme(axis.text = element_text())-> p2.1
p2.2<-p2.1 theme(axis.title = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
panel.background = element_blank(),
legend.position = c(0.9,0.8))
p2.2
image.png
下侧进化树作图
代码语言:javascript复制p3<-ggtree(tree.a,
branch.length = "none",
aes(color=group))
#geom_tiplab()
theme(legend.position = "none")
#scale_y_reverse()
coord_flip()
scale_color_manual(values = c("#cc340c",
"#13a983",
"#3f60aa"),
na.value="black")
p3
image.png
最后是拼图
代码语言:javascript复制(p1 xlim(0,8) p2.2
plot_spacer() p3)
plot_layout(ncol=2,
widths = c(0.5,3),
heights = c(3,0.5))
image.png
欢迎大家关注我的公众号
小明的数据分析笔记本
小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!
这里新学到的一个知识点是拼图的时候可以使用plot_spacer()
函数占据一个空白位置