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

