Categories: R

R 繪製樹狀圖 dendextend 套件使用教學與範例

介紹如何使用 dendextend 這個 R 套件,繪製各種複雜的樹狀圖。

dendextend 是一個專門用於繪製各種樹狀圖的 R 套件,其使用的樹狀圖格式為 dendrogram,可以對樹狀圖做各種非常細微的調整,功能非常豐富。

安裝 dendextend 套件

若要安裝 dendextend 套件,可以直接從 R 官方的 CRAN 套件庫安裝:

# 安裝 dendextend 套件
install.packages('dendextend')

亦可從 GitHub 上面下載最新的版本來安裝:

# 從 GitHub 安裝
library("devtools")
devtools::install_github('talgalili/dendextend')

安裝完成後,載入 dendextend 套件即可開始使用:

# 載入 dendextend 套件
library(dendextend)

dendextend 套件中處理 dendrogram 物件的函數是以 R 語言實作的,所以若遇到較大量的資料時,處理速度會比較慢,遇到這樣的狀況可以考慮改用 dendextendRcpp 套件,它是以 Rcpp(C 語言)的方式所實作的套件,功能相同但是處理速度比較快:

# 安裝 dendextendRcpp 套件
install.packages("Rcpp")
devtools::install_github('talgalili/dendextendRcpp')

載入 dendextendRcpp 套件之後,就可以運用一些 dendextendRcpp_ 開頭的對應函數,加速某些特定的操作:

# 載入 dendextendRcpp 套件
library(dendextendRcpp)

建議可以同時安裝 colorspace 套件,方便產生各種色盤:

# 安裝 colorspace 套件
install.packages("colorspace")

產生樹狀圖

這裡我們手動建立一個示範用的 dendrogram 樹狀圖:

# 載入 magrittr 套件
library(magrittr)

# 產生一個 dendrogram 樹狀圖
dend <- 1:5 %>% dist %>% hclust %>% as.dendrogram

dendrogram 樹狀圖用 plot 函數畫出來:

# 畫出樹狀圖
dend %>% plot
樹狀圖

我們可以透過一些函數取得樹狀圖的屬性:

# 樹狀圖節點的文字標示
dend %>% labels

# 樹狀圖的 leaves 節點數
dend %>% nleaves

# 樹狀圖的總節點數(包含 leaves)
dend %>% nnodes

節點屬性

當我們想要取得樹狀圖中各個節的屬性時,通常都會使用深度優先搜尋(depth-first search)的方式來走訪每個節點。

深度優先搜尋

get_nodes_attr 取得各個節點的屬性時,就會按照這個順序輸出:

# 取得各節點的高度
dend %>% get_nodes_attr("height")
[1] 4 1 0 0 2 0 1 0 0
# 取得各節點的子節點(leaves)數量
dend %>% get_nodes_attr("members")
[1] 5 2 1 1 3 1 2 1 1
# 判斷是否為 leaves 節點
dend %>% get_nodes_attr("leaf")
[1]   NA   NA TRUE TRUE   NA TRUE   NA TRUE TRUE
# 取得各節點的名稱
dend %>% get_nodes_attr("label")
[1] NA NA  1  2 NA  5 NA  3  4

編輯樹狀圖

若要編輯樹狀圖的各種屬性,最常用的方式就是透過 set 函數來設定,它的語法為:

set(樹狀圖物件, 屬性, 值)

其中 屬性 參數可以接受非常多種選項,舉凡文字、節點、枝幹等屬性都可用這樣的方式來設定。

節點文字

若要修改節點的文字標示內容,可以執行:

# 更改節點的文字標示
dend %>% set("labels", c(31:35)) %>% plot
更改節點的文字標示

通常在設定節點的文字標示時,會將變數類型轉為字元,避免未來在處理時出現其他的問題:

# 將節點文字標示類型轉為字元
dend %>% set("labels_to_char") %>% labels
[1] "1" "2" "5" "3" "4"

若要改變文字的顏色,可以執行:

# 將文字顏色改為紅色
dend %>% set("labels_col", "red") %>% plot
改變文字顏色

若要改變文字的大小,可以執行:

# 將文字大小改為 2
dend %>% set("labels_cex", 2) %>% plot
改變文字大小

也可以個別定每個文字的內容、顏色與大小:

# 個別指定每個文字的屬性
dend %>% set("labels", c(31:35)) %>%
  set("labels_cex", c(1, 1, 2, 2, 3)) %>%
  set("labels_col", c(3, 3, 4, 4, 2)) %>%
  plot
個別指定每個文字的屬性

在標示樹狀圖文字的顏色時,還可以配合 k 參數來指定要將整棵樹切成幾群,透過這種方式指定每一群的文字顏色:

# 分群上色
dend %>% set("labels_col", c(3, 4), k = 2) %>% plot
分群上色

Page: 1 2

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago