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

R语言中聚类过程 可视化

作者头像
一粒沙
发布2022-11-21 21:47:47
5780
发布2022-11-21 21:47:47
举报
文章被收录于专栏:R语言交流中心R语言交流中心

今天给大家介绍一款进行聚类分析结果可视化的工具clustree。K-mean聚类大家都了解,是可以对优化的K进行选择的算法,那不是最优的k具体情况是否我们也可以进行展示出来,供大家进行更细致的评估?今天这个工具就具有这样的功能,同时在单细胞亚群分析中更是用的风生水起。首先我们看下包的安装:

代码语言:javascript
复制
install.packages("clustree")

接下来通过实例来给大家看下具体内部实现过程:

代码语言:javascript
复制
##载入包和数据
library(clustree)
data("nba_clusts")
代码语言:javascript
复制
##简单树图的绘制
clustree(nba_clusts, prefix = "K")##此处利用了nba_clusts结果中的K开头的几列。

图中,节点代表的是亚群,大小代表亚群中的个体数量;边代表的是随着K增加亚群的分布变化,颜色深浅代表的是具体变化的个体数量、比例。节点的颜色代表的K的值。从图中可以看出来有一个亚群是一直独立的,说明此亚群是比较稳定的。

代码语言:javascript
复制
###对节点颜色,大小,透明度进行控制
clustree(nba_clusts, prefix = "K", node_colour = "purple", node_size = 10, node_alpha = 0.8)
代码语言:javascript
复制
###将颜色通过指定列进行变化
clustree(nba_clusts, prefix = "K", node_colour = "ReboundPct",node_colour_aggr = "mean")
代码语言:javascript
复制
###节点基于SC3稳定系数变化,此系数通过本工具直接进行计算。
clustree(nba_clusts, prefix = "K", node_colour = "sc3_stability")
代码语言:javascript
复制
##树图分布的改变,默认的是Reingold-Tilford,我们也可以选择Sugiyama使得交叉的空间变小
clustree(nba_clusts, prefix = "K", layout = "sugiyama")
代码语言:javascript
复制
###上图基础上,使得左边进行去中心化use_core_edges = FALSE
clustree(nba_clusts, prefix = "K", layout = "sugiyama", use_core_edges = FALSE)
代码语言:javascript
复制
###引入ggplot的配色方案
clustree(nba_clusts, prefix = "K") +
    scale_color_brewer(palette = "Set1") +
scale_edge_color_continuous(low = "blue", high = "red")
代码语言:javascript
复制
###legend位置的改变
clustree(nba_clusts, prefix = "K") +
    guides(edge_colour = FALSE, edge_alpha = FALSE) +
theme(legend.position = "bottom")
代码语言:javascript
复制
###每个节点增加标签
clustree(nba_clusts, prefix = "K", node_label = "AssistPct",node_label_aggr = "max")

如果想对分类的个体属性进行归类显示,可以引入自定义函数

代码语言:javascript
复制
#自定义函数
label_position <- function(labels) {
    if (length(unique(labels)) == 1) {
        position <- as.character(unique(labels))
    } else {
        position <- "mixed"
    }
    return(position)
}
#树图绘制
clustree(nba_clusts, prefix = "K", node_label = "Position",node_label_aggr = "label_position")

从图中我们看出,每个亚群如果是都是同一个位置个体,就会标注具体位置;如果什么位置都有,那就直接标记个mixed。

代码语言:javascript
复制
##把主成分结果和K树全部进行展示
clustree_overlay(nba_clusts, prefix = "K", x_value = "PC1", y_value = "PC2")

从图中我们看出不仅展示了每个个体的分布同时类的分布也都展示在对应的个体点附近。这样可以明显看出来,主要是分为两类。

那么,我们现在对应的K里的类簇不好看了,那么我们可以对其进行打标签,K*C*表示对应的K,簇。

代码语言:javascript
复制
###标签设置
clustree_overlay(nba_clusts, prefix = "K", x_value = "PC1", y_value = "PC2",label_nodes = TRUE)

那么,如果想把散点图和树图分开显示,那就是各自展示又相关。

代码语言:javascript
复制
##slide模式展示
overlay_list <- clustree_overlay(nba_clusts, prefix = "K", x_value = "PC1",y_value = "PC2", plot_sides = TRUE)
##PC1(overlay_list$x_side)或者PC2(overlay_list$y_side)
overlay_list$x_side

那么,我们看下在单细胞领域的应用

代码语言:javascript
复制
### SingleCellExperiment
library("SingleCellExperiment")
data("sc_example")
names(sc_example)
[1] "counts"          "logcounts"       "tsne"            "sc3_clusters"  
[5] "seurat_clusters"
sce <- SingleCellExperiment(assays = list(counts = sc_example$counts,
                                          logcounts = sc_example$logcounts),
                            colData = sc_example$sc3_clusters,
                            reducedDims = SimpleList(TSNE = sc_example$tsne))
代码语言:javascript
复制
head(colData(sce))
代码语言:javascript
复制
###绘制树图
clustree(sce, prefix = "sc3_", suffix = "_clusters")
代码语言:javascript
复制
### Seurat objects
library("Seurat")
# Create the Seurat object
seurat <- CreateSeuratObject(counts = sc_example$counts,
                             meta.data = sc_example$seurat_clusters)
# Add the t-SNE embedding
seurat[['TSNE']] <- CreateDimReducObject(embeddings = sc_example$tsne,
                                         key = "tSNE_")
代码语言:javascript
复制
###绘制树图,此处是seurat进行聚类分析,所以改用了res.
clustree(seurat, prefix = "res.")

以上只是用于展示的数据,自己的数据具体的展示还要看情况,不过这个展示后可以更好的查看自己的聚类效果怎么样。

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

本文分享自 R语言交流中心 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档