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

ggplotly可视化ggdendro树状图时的悬停标签显示及类别标注问题

ggplotly可视化ggdendro树状图时的悬停标签显示及类别标注问题

嗨,刚好我之前处理过类似的需求,这两个问题都可以通过手动拆解ggdendro的树状图数据,再用ggplot自定义绘图来解决,我给你一步步说清楚:

一、让悬停时显示标签(解决文本标签拥挤问题)

直接用ggdendrogram生成的图灵活性不够,没办法直接给ggplotly加自定义tooltip。我们可以先提取树状图的原始数据,手动构建ggplot图层,把标签信息放到tooltip的映射里:

library(plotly)
library(ggplot2)
library(ggdendro)

# 1. 构建层次聚类对象
hc <- hclust(dist(USArrests), "ave")

# 2. 提取树状图的结构化数据
dend_data <- dendro_data(hc, type = "rectangle")

# 3. 给叶子节点数据绑定对应的标签(比如USArrests的行名)
leaf_info <- data.frame(label = rownames(USArrests))
dend_data$labels <- cbind(dend_data$labels, leaf_info)

# 4. 用ggplot手动绘制树状图,同时定义tooltip内容
p <- ggplot() +
  # 绘制树状图的分支线段
  geom_segment(data = dend_data$segments, aes(x = x, y = y, xend = xend, yend = yend)) +
  # 绘制叶子标签,同时把标签内容映射到text参数(供ggplotly识别)
  geom_text(data = dend_data$labels, aes(x = x, y = y, label = label, text = paste("标签:", label))) +
  # 套用ggdendro的主题,保持树状图的简洁风格
  theme_dendro()

# 5. 转换成plotly对象,指定显示tooltip的内容
ggplotly(p, tooltip = "text")

这样鼠标悬停在叶子节点附近时,就能在tooltip里看到对应的标签,不用再担心文本拥挤的问题了。

二、标注cutree得到的聚类类别(对应base plot的plot(hc,labels=cl))

我们可以把cutree的聚类结果和叶子标签、坐标绑定,然后在绘图时给标签上色,同时把类别信息也放进tooltip里,效果比base plot更直观:

# 1. 计算聚类类别
cl <- cutree(hc, 5)

# 2. 整合标签、聚类类别和坐标信息
label_cluster_data <- data.frame(
  label = rownames(USArrests),
  cluster = as.factor(cl),  # 转成因子方便后续分颜色
  x = dend_data$labels$x,
  y = dend_data$labels$y
)

# 3. 绘制带类别标注的树状图
p <- ggplot() +
  geom_segment(data = dend_data$segments, aes(x = x, y = y, xend = xend, yend = yend)) +
  # 给标签按聚类类别上色,同时把标签+类别都放进tooltip
  geom_text(data = label_cluster_data, aes(x = x, y = y, label = label, color = cluster,
                                          text = paste("标签:", label, "\n聚类类别:", cluster))) +
  theme_dendro() +
  # 添加颜色图例,方便识别类别
  scale_color_discrete(name = "聚类类别")

# 4. 转换成plotly对象
ggplotly(p, tooltip = "text")

这样不仅悬停能看到每个个体的标签和所属类别,标签的颜色也会按聚类区分,一眼就能看出不同类别的分布。

备注:内容来源于stack exchange,提问作者user2955884

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:05:28