系统进化树(dendrogram ),一个用来展示亲缘关系的树状图解可视化方法。最常规的进化树大家应该不陌生,就是简单的树状分支结构。今天来分享一种进化树的高颜值画法。
画图
废话咱就不多说了,还是直接上代码吧:
library(ggraph)
library(igraph)
library(RColorBrewer)
# 边数据
d1 <- data.frame(from="origin", to=paste("group", seq(1,10), sep=""))
d2 <- data.frame(from=rep(d1$to, each=10), to=paste("subgroup", seq(1,100), sep="_"))
edges <- rbind(d1, d2)
head(edges)
from to
1 origin group1
2 origin group2
3 origin group3
4 origin group4
5 origin group5
6 origin group6
# 顶点数据
vertices <- data.frame(
name = unique(c(as.character(edges$from), as.character(edges$to))) ,
value = runif(111)
)
vertices$group <- edges$from[ match( vertices$name, edges$to ) ]
vertices$id <- NA
myleaves <- which(is.na( match(vertices$name, edges$from) ))
nleaves <- length(myleaves)
vertices$id[ myleaves ] <- seq(1:nleaves)
vertices$angle <- 90 - 360 * vertices$id / nleaves
# 调整标签的角度
vertices$hjust <- ifelse( vertices$angle < -90, 1, 0)
vertices$angle <- ifelse(vertices$angle < -90, vertices$angle+180, vertices$angle)
vertices[8:13,]
name value group id angle hjust
8 group7 0.318456155 origin NA NA NA
9 group8 0.819013230 origin NA NA NA
10 group9 0.006172561 origin NA NA NA
11 group10 0.808990760 origin NA NA NA
12 subgroup_1 0.895307263 group1 1 86.4 0
13 subgroup_2 0.453732467 group1 2 82.8 0
# 创建 graph object
mygraph <- graph_from_data_frame( edges, vertices = vertices )
# 画图
p <- ggraph(mygraph, layout = 'dendrogram', circular = T) +
geom_edge_diagonal(colour="grey") +
scale_edge_colour_distiller(palette = "RdPu") +
geom_node_text(aes(x = x*1.15, y=y*1.15, filter = leaf, label=name, angle = angle, hjust=hjust, colour=group), size=2.7) +
geom_node_point(aes(filter = leaf, x = x*1.07, y=y*1.07, colour=group, size=value, alpha=0.5)) +
scale_colour_manual(values= rep( brewer.pal(9,"Paired") , 30)) +
scale_size_continuous( range = c(0.1,10) ) +
theme_void() +
theme(legend.position="none") +
expand_limits(x = c(-1.5, 1.5), y = c(-1.5, 1.5))
p
结果如下:
图还是很漂亮的,只是画图前需要准备一下相应的数据。edges
包含边与边之间的成对关系,vertices
包含每个顶点的具体距离值以及一些绘图的参数值。数据有了,就可以创建graph
对象并画图了。画出的图是基于ggplot2
对象,扩展性方面没有什么疑问。
结束语
虽然现在疫情防控政策松了下来,但大家的情绪好像还是很焦虑。三年抗疫过程,大家都经历过大大小小的各种不确定性。面对未知的、不确定的情况,心理上出现短暂的不适应状态如担忧、焦虑的情绪也都是正常的反应。疫情的阴霾终将散去,希望这一天快些到来吧!
往期回顾
可视化:和弦图
LACE-seq 保姆级教程
可视化:两种方法绘制桑基图
可视化:density与ridgeline
单细胞:不同亚群的基因平均表达热图