使用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
相关产品推荐
相关产品推荐

