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

如何在px.treemap中跳过None条目并消除额外分组

Plotly Treemap 消除None/空格导致的额外分组问题

问题重现

原代码尝试绘制多层级树状图时,因New列存在None值触发错误:'None entries cannot have not-None children';将None替换为空格后,又生成了不必要的空格分组。原代码如下:

import pandas as pd
import plotly.express as px

test_df = pd.DataFrame(
    {
        'Product': ['Auto', 'Auto', 'Auto', 'Auto', 'PP', 'PP'],
        'New': ['No', 'No', 'Yes', 'Yes', None, None],
        'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
        'Count': [1003, 307, 44, 65, 3814, 3095],
        'Price': [1872.1, 6753.2, 7380.4, 7673.4, 2951.9, 2447.25]
    }
)
fig = px.treemap(
    test_df,
    path=[px.Constant('Group'), 'Product', 'New', 'Category'],
    values='Price',
    hover_data=['Count'],
    color='Price',
    color_continuous_scale='RdBu'
)
fig.show()

解决方案

核心思路是为不同产品构造动态路径:Auto保留New层级,PP直接跳过该层级,避免无效分组。具体实现代码如下:

import pandas as pd
import plotly.express as px

test_df = pd.DataFrame(
    {
        'Product': ['Auto', 'Auto', 'Auto', 'Auto', 'PP', 'PP'],
        'New': ['No', 'No', 'Yes', 'Yes', None, None],
        'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
        'Count': [1003, 307, 44, 65, 3814, 3095],
        'Price': [1872.1, 6753.2, 7380.4, 7673.4, 2951.9, 2447.25]
    }
)

# 生成动态路径:Auto保留New层级,PP跳过该层级
test_df['path'] = test_df.apply(
    lambda row: ['Group', row['Product'], row['New'], row['Category']] if row['Product'] == 'Auto'
    else ['Group', row['Product'], row['Category']],
    axis=1
)

fig = px.treemap(
    test_df,
    path='path',
    values='Price',
    hover_data=['Count'],
    color='Price',
    color_continuous_scale='RdBu'
)
fig.show()

原理说明

Plotly Treemap要求路径层级中不能存在None父节点,同时固定层级会强制所有行遵循同一结构,导致空格这类无效值生成额外分组。通过动态生成路径,让不同产品的层级结构匹配实际数据,既避免了None报错,又消除了不必要的中间分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:10:22