gpt4 book ai didi

r - 如何更改树状图的节点标签

转载 作者:行者123 更新时间:2023-12-04 10:28:08 25 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题.

5年前关闭。




Improve this question




我为一个项目做了一个分层集群。
我有 300 个观察值,每个变量有 20 个。
我索引了所有变量,使每个变量都在 0 和 1 之间,值越大越好。

我使用以下代码创建了一个聚类图。

d_data <- dist(all_data[,-1])
d_data_ind <- dist(data_ind[,-1])
hc_data_ind <- hclust(d_data_ind, method = "complete")
dend<- as.dendrogram(hc_data_ind)
plot(dend)

现在节点的标签在行名称中,数字 1 到 300(见上图)。在分析过程中,我删除了标记为“地理”的数据框的第一列(见下图),因为它们是文本中的城市名称,会搞砸分析。但是我 真的需要在正确的位置获取集群图上的城市名称,因为我需要根据结果选择城市列表。

我应该编写什么代码来将“地理”列中的城市名称插入到这个图中,对应于它们的行名称?

从数据框(下图)可以看出,所有城市名称都按字母顺序排列,升序排列整齐,就像行名称一样。我相信将城市名称放在情节上并不难,我只是通过谷歌搜索和四处打听找不到它。

enter image description here
How to alter the label of the nodes? Right now it's numbers but I need them to be cities.

enter image description here

最佳答案

我认为您要问的是“我如何决定树状图中的标签”。所以这有两个部分。例如,让我们使用数字 c(1,2,5,6) 的简单数据

1) 当您使用 dist 创建 hclust 时,它使用项目的名称。如果它们不存在,那么它使用运行索引。例如:

x <- c(1,2,5,6)
d1 <- as.dendrogram(hclust(dist(x)))
plot(d1)

enter image description here

这显然是一个问题,因为我们拥有的项目是 1,2,5,6 而不是 1:4!那么我们如何解决这个问题呢?一种方法是更新名称。例如:
x <- c(1,2,5,6)
names(x) <- x
x
d2 <- as.dendrogram(hclust(dist(x)))
plot(d2)

enter image description here

我相信这基本上可以解决您的问题(坦率地说,不需要 dendexend)。但是,如果您想在创建树状图后更新文本 - 请继续阅读:

2)
dendexend 包允许您更新树状图的标签。但是您需要确保使用正确的顺序(因为原始向量的顺序和树中标签的顺序不同!)。这是如何做到的:
if (!require(dendextend)) install.packages(dendextend);
library(dendextend)
x <- c(1,2,5,6)
d3 <- as.dendrogram(hclust(dist(x)))
labels(d3) <- x[order.dendrogram(d3)]
plot(d3)

enter image description here

下面是我们如何处理更复杂的数据对象(我们可能不想使用对象的行名称,而是更新树状图):
if (!require(dendextend)) install.packages(dendextend);
library(dendextend)
x <- CO2[,4:5]
d4 <- as.dendrogram(hclust(dist(x)))
labels(d4) <- apply(CO2[,1:3], 1, paste, collapse = "_")[order.dendrogram(d4)]

d4 <- set(d4, "labels_cex", 0.6)
d4 <- color_branches(d4, k = 3)
par(mar = c(3,0,0,6))
plot(d4, horiz = T)

enter image description here

关于r - 如何更改树状图的节点标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36462615/

25 4 0