前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >又是聚类分析可视化!

又是聚类分析可视化!

作者头像
医学和生信笔记
发布2022-11-15 11:02:40
2750
发布2022-11-15 11:02:40
举报
文章被收录于专栏:医学和生信笔记

聚类分析,老生常谈了,物以类聚人以群分,大概就是这么个意思。

相比于聚类分析本身,我更喜欢它的结果可视化的部分,虽然之前介绍过很多了,但是今天这个方法,还是要强烈推荐一下。

加载数据和R包

为了和之前保持一致,还是使用之前用过的数据演示~

代码语言:javascript
复制
data(nutrient, package = "flexclust")
row.names(nutrient) <- tolower(row.names(nutrient))

# 简单看下数据结构
dim(nutrient)
## [1] 27  5

str(nutrient)
## 'data.frame': 27 obs. of  5 variables:
##  $ energy : int  340 245 420 375 180 115 170 160 265 300 ...
##  $ protein: int  20 21 15 19 22 20 25 26 20 18 ...
##  $ fat    : int  28 17 39 32 10 3 7 5 20 25 ...
##  $ calcium: int  9 9 7 9 17 8 12 14 9 9 ...
##  $ iron   : num  2.6 2.7 2 2.6 3.7 1.4 1.5 5.9 2.6 2.3 ...

然后就是今天的要介绍的R包:dendextend

它很神奇,支持管道!

代码语言:javascript
复制
suppressPackageStartupMessages(library(tidyverse))
library(dendextend)
## 
## ---------------------
## Welcome to dendextend version 1.15.2
## Type citation('dendextend') for how to cite the package.
## 
## Type browseVignettes(package = 'dendextend') for the package vignette.
## The github page is: https://github.com/talgalili/dendextend/
## 
## Suggestions and bug-reports can be submitted at: https://github.com/talgalili/dendextend/issues
## You may ask questions at stackoverflow, use the r and dendextend tags: 
##   https://stackoverflow.com/questions/tagged/dendextend
## 
##  To suppress this message use:  suppressPackageStartupMessages(library(dendextend))
## ---------------------
## 
## Attaching package: 'dendextend'
## The following object is masked from 'package:stats':
## 
##     cutree

进行聚类分析

使用管道构建一个聚类树对象,感觉很神奇!

代码语言:javascript
复制
dend <- nutrient %>% 
  dist() %>% # 计算距离
  hclust() %>% # 聚类
  as.dendrogram() # 转换一下

画图

其实你直接plot也是可以出图的,并且也能进行一些美化操作:

代码语言:javascript
复制
plot(dend)

plot of chunk unnamed-chunk-4

但是今天介绍的这个dendextend更加方便也更加操作友好,支持管道操作!

代码语言:javascript
复制
dend %>% 
  
  # 线条的设置
  set("branches_col", "grey") %>% 
  set("branches_lwd", "3") %>% 
  set("labels_col", "orange") %>% 
  
  # 标签的颜色
  set("labels_cex", 0.8) %>%
  
  # 点的设置
  set("leaves_pch", 19)  %>% 
  set("leaves_cex", 0.7) %>% 
  set("leaves_col", "red") %>%  
  
  # 画图
  plot()

plot of chunk unnamed-chunk-5

看看这个流畅又好理解的操作,很强!

美化

也可以进行更加精细化的美化,比如添加矩形框,分组添加颜色等,都是支持的~

代码语言:javascript
复制
par(mar=c(1,1,1,7))

dend %>%
  
  # 添加不同的颜色
  set("labels_col", value = c("skyblue", "orange", "grey"), k=3) %>%
  set("branches_k_color", value = c("skyblue", "orange", "grey"), k = 3) %>%
  
  # 水平绘制
  plot(horiz=TRUE, axes=FALSE)

# 添加一条竖线
abline(v = 350, lty = 2)

# 添加矩形框
rect.dendrogram(dend, k=3, lty = 5, lwd = 0, x=1, horiz = T, col=rgb(0.1, 0.2, 0.4, 0.1) ) 

是不是很神奇?

添加分组条形

类似于WGCNA里面的聚类树一样,可以在底部添加条形。

比如根据protein这一列分组,大于等于20的显示红色,小于20的是绿色。

代码语言:javascript
复制
tmp <- ifelse(nutrient$protein < 20, "green","red")

par(mar=c(10,1,1,1))
dend %>%
  set("labels_col", value = c("skyblue", "orange", "grey"), k=3) %>%
  set("branches_k_color", value = c("skyblue", "orange", "grey"), k = 3) %>%
  set("leaves_pch", 19)  %>% 
  set("nodes_cex", 0.7) %>% 
  plot(axes=FALSE)
 
# 加颜色条
colored_bars(colors = tmp, dend = dend, rowLabels = "am")

tanglegram图

代码语言:javascript
复制
# 准备2个聚类树对象,使用不同的方法
d1 <- nutrient %>% dist() %>% hclust( method="average" ) %>% as.dendrogram()
d2 <- nutrient %>% dist() %>% hclust( method="complete" ) %>% as.dendrogram()
 
# 自定义每个聚类树,放到一个列表中
dl <- dendlist(
  d1 %>% 
    set("labels_col", value = c("skyblue", "orange", "grey"), k=3) %>%
    set("branches_lty", 1) %>%
    set("branches_k_color", value = c("skyblue", "orange", "grey"), k = 3),
  d2 %>% 
    set("labels_col", value = c("skyblue", "orange", "grey"), k=3) %>%
    set("branches_lty", 1) %>%
    set("branches_k_color", value = c("skyblue", "orange", "grey"), k = 3)
)
 
# 使用tanglegram画到一起
tanglegram(dl, 
           common_subtrees_color_lines = FALSE, highlight_distinct_edges  = TRUE, highlight_branches_lwd=FALSE, 
           margin_inner=7,
           lwd=2
)

plot

非常强,今天又学到了!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 医学和生信笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 加载数据和R包
  • 进行聚类分析
  • 画图
  • 美化
  • 添加分组条形
  • tanglegram图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档