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 ...

10 個月 ago

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

本篇介紹如何在 Ubuntu ...

10 個月 ago

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

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

10 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

11 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

11 個月 ago

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

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

11 個月 ago