首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标记圆密度树图

标记圆密度树图
EN

Stack Overflow用户
提问于 2017-09-15 11:20:45
回答 2查看 526关注 0票数 1

我正在绘制一个组成数据的圆形树状图。使用以下代码:

代码语言:javascript
复制
library(dendextend)
library(circlize)
library(compositions)
data("Hydrochem")
hydro<-Hydrochem

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average")
dend <- as.dendrogram(hc)
hydro$River <- as.character(hydro$River)
labels(dend) <- hydro$River[order.dendrogram(dend)]
plot(dend)

我可以得到一个正常的树状图,我想要正确的标签订单。

但是当我运行circlize_dendrogram(dend)时,我得到了这样的信息:

让我烦恼的是中间的树状图--当我不对标签使用树状图的顺序时(即只输入labels(dend) <- hydro$River),内部的树状图就会很好,一切看起来都很棒。

我尝试过修改labels_track_heightdend_track_height设置,但没有效果,当我在较小的玩具数据集上运行相同的过程时,不会出现这个问题。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-27 02:21:00

因此,您实际上在代码中出现了两个问题: 1.标签不是唯一的。2.在对树状图对象中的标签进行更新之后,绘图没有给标签留出足够的空间

第一个问题可以通过向您提供的非唯一标签中添加数字来解决,从而使它们成为唯一的。第二个问题的解决方案是在labels_track_height函数中使用circlize_dendrogram参数。下面是更新的代码(注意最后一行,其中的区别是):

代码语言:javascript
复制
library(dendextend)
library(circlize)
library(compositions)
data("Hydrochem")
hydro<-Hydrochem

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average")
dend <- as.dendrogram(hc)

tmp <- as.character(hydro$River)[order.dendrogram(dend)]
labels(dend) <- paste0(seq_along(tmp), "_", tmp)
plot(dend)
circlize_dendrogram(dend, labels_track_height  = 0.4)

您得到的输出如下:

(这现在是在dendexmir1.6.0中自动完成的,目前可以在github上获得,稍后也可以在CRAN上使用)

票数 1
EN

Stack Overflow用户

发布于 2017-09-18 10:43:57

因此,这个问题的解决方案(如果有人可以提供更多的详细信息,请这样做,因为我完全不明白为什么这很重要)是在定义标签之后添加第二个dend <- as.dendrogram(hc)调用。因此,代码看起来如下:

代码语言:javascript
复制
d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average")
dend <- as.dendrogram(hc)
hydro$River <- as.character(hydro$River)
labels(dend) <- hydro$River[order.dendrogram(dend)]
dend <- as.dendrogram(hc)
circlize_dendrogram(dend)

另一个用户的注意:这并不能解决问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46238364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档