R語言繪圖——層次聚類圖及樹狀圖添加side bar


聚類分析作圖往往包含熱圖(heatmap)和樹狀圖(dendrogram)。熱圖用來展示每個樣本點數值大小和聚集模式。樹狀圖用來表示樣本之間以及變量之間的距離遠近(或者相似性大小)。R官網目前提供了至少45個可以繪制熱圖的包(packages),其中比較常見的、可以添加行列注釋信息條的聚類作圖包有pheatmapgplots等等。以下簡單介紹一下對熱圖(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM