You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言circlize_dendrogram中仅显示选定标签

解决dendextend圆形树状图仅显示指定标签的问题

问题场景

使用dendextend包绘制矩形树状图时,通过将非目标标签设为空白字符串,可实现仅显示以Merc开头的标签。但切换到circlize_dendrogram绘制圆形树状图时,会触发以下警告:

Not all labels are unique. Therefore, we pad the labels with a running number, so to be able to produce the plot.

此时非目标标签会被自动添加序号显示,无法达到隐藏效果。

问题原因

circlize_dendrogram对标签的唯一性有严格要求,大量重复的空白标签会触发内部的标签补全逻辑,导致原本要隐藏的标签被带序号的内容替代。

解决方案

无需修改标签内容,而是通过控制标签的显示大小(labels_cex)来隐藏非目标标签:

  • 保留所有原始标签以保证唯一性
  • 将非Merc开头的标签的cex设为0(完全不显示)
  • 目标标签的cex保持需要的大小

修改后的完整代码

1. 初始数据处理

library(dplyr)
library(dendextend)

mtcars %>% 
  select(mpg, cyl, disp, drat, hp, carb) %>% 
  dist() %>% 
  hclust() %>% 
  as.dendrogram() -> dend

2. 矩形树状图(原逻辑可保留)

leafcols <- as.numeric(mtcars[, "am"])
leafcols <- leafcols[order.dendrogram(dend)]
leafcols[leafcols == 1] <- "darkred"
leafcols[leafcols == 0] <- "darkblue"

new_labels <- dend %>% labels
new_labels[!grepl("^Merc", new_labels)] <- ""

dend %>% 
  set("leaves_pch", 19) %>% 
  set("leaves_cex", 2) %>% 
  set("leaves_col", leafcols) %>% 
  set("labels", new_labels) %>%
  plot(type = "rectangle")

3. 圆形树状图(修复版本)

leafcols <- as.numeric(mtcars[, "am"])
leafcols <- leafcols[order.dendrogram(dend)]
leafcols[leafcols == 1] <- "darkred"
leafcols[leafcols == 0] <- "darkblue"

# 定义标签显示大小:Merc开头的标签设为2,其余设为0
label_cex <- ifelse(grepl("^Merc", labels(dend)), 2, 0)

dend %>% 
  set("leaves_pch", 19) %>% 
  set("leaves_cex", 2) %>% 
  set("leaves_col", leafcols) %>% 
  set("labels_cex", label_cex) %>%  # 设置标签显示大小
  circlize_dendrogram(dend_track_height = 0.8)

说明

  • 该方案保留了所有原始标签的唯一性,避免了警告触发
  • 通过labels_cex = 0实现非目标标签的完全隐藏,效果与设置空白标签一致
  • 同时保留了叶子节点的点样式、大小和颜色设置,不影响其他可视化效果

内容的提问来源于stack exchange,提问作者Crops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:17:11