R语言绘图——层次聚类图及树状图添加side bar
Posted eat-drink-breathe-hard
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言绘图——层次聚类图及树状图添加side bar相关的知识,希望对你有一定的参考价值。
聚类分析作图往往包含热图(heatmap)和树状图(dendrogram)。热图用来展示每个样本点数值大小和聚集模式。树状图用来表示样本之间以及变量之间的距离远近(或者相似性大小)。R官网目前提供了至少45个可以绘制热图的包(packages),其中比较常见的、可以添加行列注释信息条的聚类作图包有pheatmap、gplots等等。以下简单介绍一下对热图(heatmap)和树状图(dendrogram)添加注释信息条(side bar)的方法(以mtcars数据集为例)。
树状图+热图+side bar
library(gplots)#导入R包
data(mtcars)#导入示例数据
x <- as.matrix(mtcars)#gplots要求输入numeric matrix,所以要转化为数量矩阵
rc <- rainbow(nrow(x),start=0, end=.3)#用于绘制side bar,给每一个行名赋一种颜色
cc <- rainbow(ncol(x), start=0, end=.3)#用于绘制side bar,给每一个列名赋一种颜色
hv <- heatmap.2(x,RowSideColors=rc, ColSideColors=cc)#画图
结果如下图:
树状图+side bar
如果数据量比较大,不想显示热图部分,而只想显示树状图部分,则可以使用dendextend包(仍以mtcars数据集为例)实现。
library(dendextend)#导入R包
data(mtcars)#导入数据
dend <- as.dendrogram(hclust(dist(mtcars)))
# 给每种样本(汽车)赋一种颜色,这里有四种汽车类型
car_type <- rep("Other", length(rownames(mtcars)))
is_x <- grepl("Merc", rownames(mtcars))
car_type[is_x] <- "Mercedes"
is_x <- grepl("Mazda", rownames(mtcars))
car_type[is_x] <- "Mazda"
is_x <- grepl("Toyota", rownames(mtcars))
car_type[is_x] <- "Toyota"
car_type <- factor(car_type)
n_car_types <- length(unique(car_type))
cols_4 <- colorspace::rainbow_hcl(n_car_types, c = 70, l = 50)
col_car_type <- cols_4[car_type]
#画图
par(mar = c(12,4,1,1))
plot(dend)
colored_bars(col_car_type,dend,rowLabels="")
结果如下图:
另:有时候数据量非常大,样本名称叠加到一起会糊成一片,导致看不清楚。不如去掉样本名称,代码如下:
#画图
par(mar = c(12,4,1,1))
labels(dend) <- ""
plot(dend)
colored_bars(col_car_type,dend,rowLabels="")
结果如下图所示:
参考资料:
[1] Frequently asked questions
[2] Hierarchical cluster analysis on famous data sets - enhanced with the dendextend package
以上是关于R语言绘图——层次聚类图及树状图添加side bar的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化:为层次聚类树状图dendrogram中的簇进行着色在树状图dendrogram中为不同的层次聚类簇配置不同的色彩