来自同一 hclust 对象的绘图之间的颜色变化需要保持统一以保证用户体验

2023-12-27

我正在尝试创建一个聚类评估工具。通过3情节。 但颜色不一致。因此,一个簇中的一个簇可能在一个图中是蓝色的,但在另一个图中是黄色的。对用户不友好。

可以为任何 Hclust 对象提供以下函数,它将生成 3 个图。树状图、聚类图和轮廓图。颜色与后两个一致,但树状图颜色不同。我认为这就是这个情节的等级性质。因此,劈开的拳头获得第一种颜色。但我不确定。因为它们都具有相同的对象和相同的簇标签(1、2 等)。这种变色确实困扰着我,我该如何解决它。如果你知道为什么会发生这种情况或者有解决方案,我会洗耳恭听。 使用的库是factoextra

这也是我的第一篇文章。因此,如果有任何不清楚或任何问题,请告诉我。

library(factoextra)

# clustermodel = hclust object
# tot_clusters = the number of clusters (same as used as argument in hclust function)
# plots is an temp env to save the plots (function only returns one item so this is a work around) 
# the plots wil later be plotted by calling { plot(plots$dend) }  *example*
Cluster_visualisation <-  function(cluster_model, tot_clusters, plots) {

plots$dend <- fviz_dend(cluster_model, ggtheme = theme_minimal(),
          show_labels = FALSE, main = paste("Dendrogram", tot_clusters, "clusters" ))

plots$sil <- fviz_silhouette(cluster_model, print.summary = F, main= paste("silhouette plot of", tot_clusters, "clusters"), ggtheme = theme_minimal())

plots$clust <-fviz_cluster(cluster_model, ellipse.type = "convex", ggtheme = theme_minimal(),
             labelsize = 0, main= paste("Cluster plot of", tot_clusters ,"clusters"))

这是一个匹配由以下命令创建的树状图的分​​支颜色的解决方案fviz_dend。本质上,您需要从 ggplot 对象中提取树状图顺序,然后用它来确定fviz_silhouette, fviz_clust或您可能想做的任何其他情节。

library(factoextra)
library(RColorBrewer)
library(cluster)
library(cowplot)

## generate data
iris <- datasets::iris

## perform hierarchical clustering 
d_iris <- dist(iris)
hc_iris <- hclust(d_iris, method = "complete")

## cut tree to three clusters
k = 3
clust_iris <- cutree(hc_iris,k=k)

## pick colour
cols = brewer.pal(n=k, "Set2")

## plot dendrogram
plot_dend =
fviz_dend(hc_iris, k_colors = cols, k=k) + theme_cowplot()

## create silhouette data
sil_data = as.numeric(clust_iris)
names(sil_data) = rownames(iris)
sil_iris = silhouette(sil_data, d_iris)

## extract dendrogram from ggplot object and create named colour vector
dend = attributes(plot_dend)$dendrogram
tree_order <- order.dendrogram(dend)
clust_iris = factor(clust_iris, levels = unique(clust_iris[tree_order]))
names(cols) = unique(clust_iris[tree_order])

## plot silhouettes
plot_silhouette =
fviz_silhouette(sil_iris, print.summary = F) + 
  scale_colour_manual(values = cols) +
  scale_fill_manual(values = cols) + 
  theme_cowplot()

## plot clusters 
plot_cluster =
fviz_cluster(list(data = d_iris, cluster = clust_iris)) + 
  scale_colour_manual(values = cols) +
  scale_fill_manual(values = cols) + 
  theme_cowplot()

## show as grid
plot_grid(plot_dend, plot_silhouette, plot_cluster, ncol=3)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自同一 hclust 对象的绘图之间的颜色变化需要保持统一以保证用户体验 的相关文章

  • 使用 R 下载压缩数据文件、提取并导入 .csv

    我正在尝试使用以下方法从网页下载并提取 csv 文件R 这个问题是重复的使用 R 下载压缩数据文件 提取和导入数据 https stackoverflow com questions 3053833 using r to download
  • 如何不显示 ggplot 轴上的所有标签?

    I m trying to using ggplot2 to plot this But as you can see on the x axis you can t read anything 那么如何在 x 轴上显示每 10 年的值呢
  • 如果值大于或小于,则替换数据框中的值

    我在 R 中操作数据帧时遇到问题 这是 R 中的基本内容 但我找不到执行此类操作的最佳命令 虚拟示例 Var1 20 300 39 Var2 49 23 91 Var3 0 239 210 我怎样才能用10如果值小于 则在第 2 列中10
  • ggplot2 中的中心图标题

    这个简单的代码 以及今天早上我的所有脚本 已经开始在 ggplot2 中给我一个偏离中心的标题 Ubuntu version 16 04 R studio version Version 0 99 896 R version 3 3 2 G
  • 如何将 Shiny 中生成的反应图传递到 Rmarkdown 以生成动态报告

    简而言之 我希望能够通过单击按钮从我的闪亮应用程序生成动态 Rmarkdown 报告文件 pdf 或 html 为此 我想我将使用 Shiny 的参数化报告 但不知何故 我无法将单个谜题转移到所需的目标 使用此代码 我们可以在 R Shin
  • R中data.frame(列表)的列平均值

    Data https i stack imgur com ZYsmv jpg 请 我需要计算此 data frame 中维吉尼亚币 Sepal Length 列的平均值 Sepal Length Sepal Width Petal Leng
  • ggplot 按因子和梯度颜色

    我正在尝试绘制一个对两个变量 一个因子和一个强度 进行着色的图 我希望每个因素都是不同的颜色 并且我希望强度是白色和该颜色之间的渐变 到目前为止 我已经使用了诸如对因子进行分面等技术 将颜色设置为两个变量之间的相互作用 并将颜色设置为因子并
  • 使用 broom 和 tidyverse 对不同的因变量进行回归

    我正在寻找一个 Tidyverse 扫帚解决方案来解决这个难题 假设我有不同的 DV and a specificIVS 集 我想执行一个考虑每个 DV 和这组特定 IV 的回归 我知道我可以使用类似 for i in 或 apply fa
  • ODE 时间 Matlab 与 R

    如果在 matlab 中使用可变时间步长求解器 例如 ODE45 我会定义输出的时间跨度 即times 0 50 matlab 将返回 0 到 50 之间不同时间步长的结果 然而在 R 中 我似乎必须定义我希望 ODE 返回结果的时间点 即
  • 如果落在 R 中另一个数据集中的两个变量定义的范围内,则从一个数据集中获取变量值

    我有一个关于 R 中日期操作的问题 我已经查了好几天了 但在网上找不到任何帮助 我有一个数据集 其中有 id 和两个日期 另一个数据集具有相同的 id 变量 日期和价格 例如 x data frame id c A B C C date1
  • 如何在有条件的情况下获得R中多列的中位数(根据另一列)

    我是 R 初学者 我想知道如何完成以下任务 我想用数据集所有列的中位数替换数据集的缺失值 但是 对于每一列 我想要某个类别的中位数 取决于另一列 我的数据集如下 structure list Country structure 1 5 La
  • 在 R 中计算大矩阵的零空间

    我找不到任何函数或包来计算 a 的零空间或 QR 分解 bigmatrix from library bigmemory 在 R 中 例如 library bigmemory a lt big matrix 1000000 1000 typ
  • e_facet 在 echarts4r 问题中使用分组数据

    我真的很喜欢这个包提供的可能性 并且想在一个闪亮的应用程序中使用它 然而我正在努力重新创建从 ggplot 到 echarts4r 的情节 library tidyverse library echarts4r data tibble ti
  • 为特定 ID 重新编码列中的观察结果

    我有一个数据集 称为 调查 其中有行是个人 ID 列中有许多问题 我需要将 1 列中的值重新编码为 NA 并将观察结果移至另一列 例如 ID Fruit Vegetable aaa NA grape bbb NA tomato ccc ap
  • Rcpp 包不包含 Rcpp_precious_remove

    我一直在尝试创建数据库并安装 DBI 包 但仍然遇到此错误 我重新安装了 DBI 和 RSQLite 软件包 但它们似乎不起作用 library DBI con lt dbConnect RSQLite SQLite dbname memo
  • xtable 中的 Cox 回归输出 - 选择行/列并添加置信区间

    我不想将 cox 回归的输出导出到一个表中 然后将其放入我的文章中 我想最好的方法是使用 xtable library survival data pbc fit pbc lt coxph Surv time status 2 age ed
  • k折交叉验证 - 如何自动获得预测?

    这可能是一个愚蠢的问题 但我只是找不到一个包来做到这一点 我知道我可以编写一些代码来获得我想要的东西 但如果有一个函数可以自动完成它那就太好了 所以基本上我想对 glm 模型进行 k 倍交叉验证 我想自动获取每个验证集的预测和实际值 因此
  • R中的for循环和if函数

    我正在用 R 中的 if 函数编写一个循环 表格如下 ID category 1 a 1 b 1 c 2 a 2 b 3 a 3 b 4 a 5 a 我想使用 for 循环和 if 函数添加另一列来计算每个分组的 ID 如下所示的计数列 I
  • 从 SpatialPolygons 和其他 sp 类中提取要素坐标

    Package sp为不同的空间概念 点 线 多边形 提供了许多类 对于某些类 访问要素坐标很简单 例如SpatialLines 所有示例均取自相应课程的帮助页面 l1 cbind c 1 2 3 c 3 2 2 l1a cbind l1
  • Pyspark - 一次聚合数据帧的所有列[重复]

    这个问题在这里已经有答案了 我想将数据框分组到单个列上 然后对所有列应用聚合函数 例如 我有一个包含 10 列的 df 我希望对第一列 1 进行分组 然后对所有剩余列 均为数字 应用聚合函数 sum 与此等效的 R 是 summarise

随机推荐