R语言 如何在`fviz_dend`中添加图例

gzjq41n4  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(174)

我想在此树状图中添加与群集#

相关的图例
我使用此代码,但它不显示图例,也没有给出任何警告或错误也。

dend <- fviz_dend(hc1, k = 3,
          k_colors = "aaas",
          color_labels_by_k = T,
          rect = TRUE,
          rect_border = "aaas" ,
          rect_fill = TRUE,horiz = T,
          cex = 0.8, lwd=1)+ labs(title = "")+ 
    theme(panel.background = element_rect(colour = "black"),
        axis.text.y =element_text(colour="black", size = 10, face = "bold"),
        axis.text.x =element_text(colour="black", size = 10, face = "bold"),
        axis.ticks = element_line(colour = "black"),
        axis.ticks.y = element_line(colour = "black"),
        panel.grid.minor = element_line())+
  guides(fill=guide_legend(title = "Cluster #"))
dend <- dend+
  scale_fill_manual(values = c("I" = "blue", "II" = "darkgreen", "III" = "red"))
q5lcpyga

q5lcpyga1#

我们没有你的数据,所以我们可以使用内置的USArrests数据集:

library(factoextra)

data(USArrests)
hc1 <- hclust(dist(scale(USArrests)))

当我们在上面运行你的plot代码时,我们得到下面的树状图:

dend

虽然结果是一个ggplot对象,但矩形的填充颜色不会Map到变量。相反,颜色直接指定为美学参数,因此不会生成图例。要解决这个问题,需要在geom_rect层中设置美学Map,并从层的美学参数中删除fill,所有这些都有点复杂,但看起来像这样:

library(rlang)

params <- dend$layers[[4]]$aes_params
dend$layers[[4]]$aes_params <- params[!names(params) %in% c('fill', 'colour')]
dend$layers[[4]]$mapping$fill <- quo_set_env(quo(cluster), 
                                  quo_get_env(dend$layers[[4]]$mapping$xmin))

现在我们可以做到:

dend +
  scale_fill_manual(values = c(c1 = "blue", c3 = "darkgreen", c2 = "red"))

相关问题