NVEFLY 2020-04-19
聚类分析作图往往包含热图(heatmap)和树状图(dendrogram)。热图用来展示每个样本点数值大小和聚集模式。树状图用来表示样本之间以及变量之间的距离远近(或者相似性大小)。R官网目前提供了至少45个可以绘制热图的包(packages),其中比较常见的、可以添加行列注释信息条的聚类作图包有pheatmap、gplots等等。以下简单介绍一下对热图(heatmap)和树状图(dendrogram)添加注释信息条(side bar)的方法(以mtcars数据集为例)。
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)#画图
结果如下图:
如果数据量比较大,不想显示热图部分,而只想显示树状图部分,则可以使用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