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

使用R的plot_ly函数生成Sunburst图出现空白页问题排查

解决plot_ly生成Sunburst图空白的问题

你的代码生成空白图的核心问题是缺少Sunburst图必需的顶层根节点,且层级结构不完整。Plotly的Sunburst要求数据包含完整的层级链:从根节点→中间分组节点→叶子节点,每个父节点必须在数据中有对应的条目。

修复步骤:

  • 添加一个顶层根节点(比如命名为"总反馈"),将Risposta列的三个类别(Negativa/Neutra/Positiva)作为它的子节点
  • 计算每个Risposta类别的总和,作为根节点下对应子节点的数值
  • 确保所有父节点都在数据中存在对应行,形成完整的层级关系

修改后的完整代码:

library(plotly)

# 构建包含完整层级的数据框
df <- data.frame(
  # 层级标签:根节点 → 中间节点 → 叶子节点
  labels = c('总反馈', 'Negativa', 'Neutra', 'Positiva',
             '1 stella', '2 stelle', '3 stelle', '4 stelle', '5 stelle',
             '1 stelle', '2 stelle', '3 stelle', '4 stelle', '5 stelle',
             '3 stelle', '4 stelle', '5 stelle'),
  # 对应父节点:根节点无父节点(设为""),中间节点父节点是根,叶子节点父节点是对应Risposta
  parents = c('', '总反馈', '总反馈', '总反馈',
              'Negativa', 'Negativa', 'Negativa', 'Negativa', 'Negativa',
              'Neutra', 'Neutra', 'Neutra', 'Neutra', 'Neutra',
              'Positiva', 'Positiva', 'Positiva'),
  # 数值:根节点数值是所有叶子节点总和,中间节点是对应分类的总和,叶子节点用原Numero值
  values = c(27+21+7+1+3+2+4+16+14+8+2+31+57,
             27+21+7+1+3, 2+4+16+14+8, 2+31+57,
             27,21,7,1,3,
             2,4,16,14,8,
             2,31,57)
)

# 生成Sunburst图,branchvalues="total"确保父节点数值等于子节点总和
plot <- plot_ly(
  data = df,
  labels = ~labels,
  parents = ~parents,
  values = ~values,
  type = "sunburst",
  branchvalues = "total"
) %>% layout(title = "反馈评级分布")

plot

关键说明:

  • 根节点的parents必须设为空字符串"",表示它是最顶层节点
  • branchvalues="total"要求父节点的values严格等于所有子节点的数值之和,这样分支长度会正确显示每个节点的占比
  • 如果不想手动计算总和,也可以用dplyr自动汇总,比如:
library(dplyr)

# 先汇总中间节点数据
risposta_totals <- df %>% group_by(Risposta) %>% summarise(Numero = sum(Numero))
# 构建根节点数据
root_row <- data.frame(Valutazione = "总反馈", Risposta = "", Numero = sum(df$Numero))
# 合并所有层级数据
full_df <- bind_rows(root_row, 
                     risposta_totals %>% rename(Valutazione = Risposta), 
                     df) %>%
  mutate(parents = ifelse(Valutazione == "总反馈", "", 
                          ifelse(Valutazione %in% c("Negativa","Neutra","Positiva"), "总反馈", Risposta))) %>%
  rename(labels = Valutazione, values = Numero)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:58:13