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

修改底层数据集后Plotly Sunburst Chart无法渲染问题求助

问题核心原因

渲染失败的核心原因是生成的层级DataFrame存在重复ID,Plotly旭日图要求所有节点的id必须全局唯一,不能出现多个同ID对应不同父级的情况,从你输出的df_all_trees可以验证这一点:存在多个ID为Fri、Dinner的节点,分别对应不同的父级,Plotly无法解析层级关系,导致渲染失败。

修复方案

1. 移除冗余代码

删除无用的Unnamed: 0列插入逻辑,该列无实际作用,反而会在groupby聚合时干扰计算结果,原代码中以下两行可以直接删除:

df.insert(0, "Unnamed: 0", range(0, 0 + len(df)))
df.reset_index(inplace=True,drop=True)

2. 修改层级ID生成逻辑

调整build_hierarchical_dataframe函数中id和parent的生成规则,给每个节点拼接完整层级路径保证全局唯一,修改后的函数核心逻辑如下:

def build_hierarchical_dataframe(df, levels, value_column, color_columns=None):
    df_all_trees = pd.DataFrame(columns=['id', 'parent', 'value', 'color'])
    for i, level in enumerate(levels):
        df_tree = pd.DataFrame(columns=['id', 'parent', 'value', 'color'])
        dfg = df.groupby(levels[i:]).sum(numeric_only=True).reset_index()
        # 拼接完整层级路径作为唯一id
        df_tree['id'] = dfg[levels[i:]].apply(lambda x: '-'.join(map(str, x)), axis=1)
        if i < len(levels) - 1:
            # parent取上一级的完整路径
            df_tree['parent'] = dfg[levels[i+1:]].apply(lambda x: '-'.join(map(str, x)), axis=1)
        else:
            df_tree['parent'] = 'total'
        df_tree['value'] = dfg[value_column]
        df_tree['color'] = dfg[color_columns[0]] / dfg[color_columns[1]]
        df_all_trees = pd.concat([df_all_trees, df_tree], ignore_index=True)
    total = pd.Series(dict(id='total', parent='',
                              value=df[value_column].sum(),
                              color=df[color_columns[0]].sum() / df[color_columns[1]].sum()))
    df_all_trees = pd.concat([df_all_trees, total.to_frame().T], ignore_index=True)
    return df_all_trees

注意:Pandas 1.3.2版本中append方法已经不推荐使用,替换为pd.concat兼容性更好,同时groupby.sum添加numeric_only=True参数避免非数值列聚合报错。

修改完成后重新运行代码即可正常在浏览器中渲染旭日图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:27:02