其他
R语言聚类分析可视化(2)
“医学和生信笔记,专注R语言在临床医学中的使用、R语言数据分析和可视化。主要分享R语言做医学统计学、临床研究设计、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。
💡专注R语言在🩺生物医学中的使用
之前的推文使用默认的plot
函数进行聚类树的可视化,详情请点击:R语言聚类分析(1),今天继续扩展聚类树的可视化。
默认的聚类树可视化函数已经非常好用,有非常多的自定义设置,可以轻松实现好看的聚类树可视化。
比如加个背景,更改颜色等:
op <- par(bg = "grey90")
plot(h.clust, main = "层次聚类", sub="", xlab = "",
col = "#487AA1", col.main = "#45ADA8", col.lab = "#7C8071",
col.axis = "#F38630", lwd = 2, lty = 1, hang = -1, axes = FALSE)
# add axis
axis(side = 2, at = 0:5, col = "#F38630",
labels = FALSE, lwd = 2)
# add text in margin
mtext(0:5, side = 2, at = 0:5,
line = 1, col = "#A38630", las = 2)
par(op)
如果对默认的可视化效果不满意,可以先用as.dendrogram()
转化一下,再画图可以指定更多细节。
dhc <- as.dendrogram(h.clust)
plot(dhc,type = "triangle") # 比如换个类型
可以提取部分树进行查看,使用cut
指定某个高度以上或以下的树进行查看。
op <- par(mfrow = c(2, 1))
# 高度在3以上的树
plot(cut(dhc, h = 3)$upper, main = "Upper tree of cut at h=3")
# 高度在3以下的树
plot(cut(dhc, h = 3)$lower[[2]],
main = "Second branch of lower tree with cut at h=3")
par(op)
每一个节点都有不同的属性,比如颜色、形状等,我们可以用函数修改每个节点的属性。
比如修改标签的颜色。
# 按照上面画出来的结果,我们可以分为5类,所以准备好5个颜色
labelColors = c("#CDB380", "#036564", "#EB6841", "#EDC951", "#487AA1")
# 把聚类树分为5个类
clusMember <- cutree(h.clust,k=5)
# 给标签增加不同的颜色
colLab <- function(n) {
if (is.leaf(n)) {
a <- attributes(n)
labCol <- labelColors[clusMember[which(names(clusMember) == a$label)]]
attr(n, "nodePar") <- c(a$nodePar,
list(cex=1.5, # 节点形状大小
pch=20, # 节点形状
col=labCol, # 节点颜色
lab.col=labCol, # 标签颜色
lab.font=2, # 标签字体,粗体斜体粗斜体
lab.cex=1 # 标签大小
)
)
}
n
}
# 把自定义标签颜色应用到聚类树中
diyDendro = dendrapply(dhc, colLab)
# 画图
plot(diyDendro, main = "DIY Dendrogram")
# 加图例
legend("topright",
legend = c("Cluster 1","Cluster 2","Cluster 3","Cluster 4","Cluster 5"),
col = c("#CDB380", "#036564", "#EB6841", "#EDC951", "#487AA1"),
pch = c(20,20,20,20,20), bty = "n", pt.cex = 2, cex = 1 ,
text.col = "black", horiz = FALSE, inset = c(0, 0.1))
如果想要更加精美的聚类分析可视化,可以参考之前的几篇推文:
参考资料
R帮助文档 https://r-graph-gallery.com/31-custom-colors-in-dendrogram.html https://www.gastonsanchez.com/visually-enforced/how-to/2012/10/0/Dendrograms/
咨询交流等,欢迎加入🐧QQ交流群:613637742
往期推荐