用多种颜色标记 ggdendro 叶子

Posted

技术标签:

【中文标题】用多种颜色标记 ggdendro 叶子【英文标题】:Labelling ggdendro leaves in multiple colors 【发布时间】:2011-12-24 03:17:32 【问题描述】:

我有一种情况,我正在用带有类标签的数据点绘制一个树状图。 我希望看到凝聚聚类将具有相同标签的人组合在一起。对标签进行颜色编码可以很容易地阅读这样的树状图。有没有办法在 R 中使用 ggdendro 来实现这一点?

【问题讨论】:

【参考方案1】:

从this post 窃取大部分设置...

library(ggplot2)
library(ggdendro)
data(mtcars)
x <- as.matrix(scale(mtcars))
dd.row <- as.dendrogram(hclust(dist(t(x))))
ddata_x <- dendro_data(dd.row)

p2 <- ggplot(segment(ddata_x)) +
  geom_segment(aes(x=x, y=y, xend=xend, yend=yend))

...并添加分组因子...

labs <- label(ddata_x)
labs$group <- c(rep("Clust1", 5), rep("Clust2", 2), rep("Clust3", 4))
labs
#     x y text  group
# 1   1 0 carb Clust1
# 2   2 0   wt Clust1
# 3   3 0   hp Clust1
# 4   4 0  cyl Clust1
# 5   5 0 disp Clust1
# 6   6 0 qsec Clust2
# 7   7 0   vs Clust2
# 8   8 0  mpg Clust3
# 9   9 0 drat Clust3
# 10 10 0   am Clust3
# 11 11 0 gear Clust3

...您可以使用geom_text()aes(colour=) 参数为标签着色:

p2 + geom_text(data=label(ddata_x),
               aes(label=label, x=x, y=0, colour=labs$group))

(如果你想提供自己的颜色,你可以使用scale_colour_manual(),做这样的事情:

p2 + geom_text(data=label(ddata_x),
               aes(label=label, x=x, y=0, colour=labs$group)) +
     scale_colour_manual(values=c("blue", "orange", "darkgreen"))

【讨论】:

谢谢!我对 R 比较陌生,这对我很有帮助。 运行你的代码,我得到2个错误:1)在geom_segment,它找不到x0,但这只是通过更改x=x, y=y, xend=xend, yend=yend中的参数来解决的; 2) 在geom_text 中,它说:Don't know how to automatically pick scale for object of type function. Defaulting to continuous Error in data.frame(x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), y = 0, label = function (x, : arguments imply differing number of rows: 11, 1, 0。我该如何解决?因为我有类似的情况要处理(即着色标签)并提供相同的错误。 @DavidePassaretti -- 在 Andrie de Vries(ggdendro 的作者)和 Roland(另一位 SO 常客)的帮助下,我编辑了代码,使其能够与ggdendro 的当前版本。感谢您提醒这个答案不再起作用! 有没有办法给叶子上色而不是给标签上色?谢谢

以上是关于用多种颜色标记 ggdendro 叶子的主要内容,如果未能解决你的问题,请参考以下文章

标记指定颜色

谷歌用其他颜色映射 v3 默认标记路径

highcharts中的条件标记颜色

百度地图里的标记点能改颜色么 怎么改

[树形dp] Jzoj P1010 叶子的颜色

Excel删除重复数据及用公式筛选重复项并标记颜色突出显示