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

使用Plotly Express绘制Treemap时颜色不匹配问题求助

问题:Plotly Treemap 无法应用指定颜色

我需要绘制一个仅包含“category”和“color”列的DataFrame,颜色为文字形式可转换为RGB值,希望为对应类别分配指定颜色。但使用以下代码后,树形图并未应用指定颜色,尝试过调整颜色和代码结构仍无法解决。

示例代码:

data = pd.DataFrame({
    "category": ["A", "B", "C", "D", "E"],
    "color": ["red", "green", "blue", "green", "red"]
})

# 定义颜色名称到RGB值的映射字典
color_map = {
    "red": "rgb(255,160,122)",
    "green": "rgb(124,252,0)",
    "blue": "rgb(240,248,255)"
}

# 将color列映射为RGB值
data["color"] = data["color"].map(color_map)

# 创建树形图并指定color列
fig = px.treemap(data, 
                 path=["category"], 
                 color="color")
st.plotly_chart(fig, use_container_width=False)

输出效果:
未正确应用颜色的树形图

解决方法

Plotly Express的color参数默认是根据数据值生成色阶映射,不会直接使用列中的RGB字符串作为填充色。要实现指定颜色的需求,得用color_discrete_map参数来绑定类别和对应的颜色,具体有两种实现方式:

方式一:直接绑定类别与RGB值

适合类别数量固定且较少的场景:

import pandas as pd
import plotly.express as px
import streamlit as st

data = pd.DataFrame({
    "category": ["A", "B", "C", "D", "E"],
    "color": ["red", "green", "blue", "green", "red"]
})

# 直接定义每个类别对应的RGB颜色
category_color_map = {
    "A": "rgb(255,160,122)",
    "B": "rgb(124,252,0)",
    "C": "rgb(240,248,255)",
    "D": "rgb(124,252,0)",
    "E": "rgb(255,160,122)"
}

# 创建树形图,基于category区分颜色,并用color_discrete_map指定对应色值
fig = px.treemap(data, 
                 path=["category"], 
                 color="category",
                 color_discrete_map=category_color_map)

st.plotly_chart(fig, use_container_width=False)

方式二:利用原color列生成映射字典

适合动态数据场景,可根据原color列自动匹配:

import pandas as pd
import plotly.express as px
import streamlit as st

data = pd.DataFrame({
    "category": ["A", "B", "C", "D", "E"],
    "color": ["red", "green", "blue", "green", "red"]
})

# 颜色名称到RGB的映射
color_map = {
    "red": "rgb(255,160,122)",
    "green": "rgb(124,252,0)",
    "blue": "rgb(240,248,255)"
}

# 生成类别到RGB颜色的映射字典
category_color_map = data.set_index('category')['color'].map(color_map).to_dict()

# 创建树形图并应用颜色映射
fig = px.treemap(data, 
                 path=["category"], 
                 color="category",
                 color_discrete_map=category_color_map)

st.plotly_chart(fig, use_container_width=False)

两种方式的核心都是通过color_discrete_map来明确指定每个类别对应的填充色,这样就能让树形图正确显示你想要的颜色了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:35:16