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

Python用Plotly绘制柱形图时如何设置多color参数实现双维度分色?

问题原因

Plotly Express 的 color 参数仅支持传入单个数据列名,不支持直接传入多列组成的列表,因此你传入["Country","Type"]的写法会触发报错。

解决方案

方案1:构造组合列映射颜色(最简单,适合快速出图)

先将Country和Type两个字段拼接为一个新的组合字段,再将color参数绑定到这个新字段即可同时通过颜色区分两个维度:

import pandas as pd
import plotly.express as px

# 读取数据集(如果是从剪贴板读取可以用pd.read_clipboard(sep=',', index_col=0))
df = pd.read_csv("你的数据路径.csv", index_col=0)
# 构造组合字段
df["Country_Type"] = df["Country"] + "_" + df["Type"]

# 绘图
fig = px.bar(df, 
             x="Year",
             y="Count",
             barmode="group",
             color="Country_Type",
             hover_data=["Country", "Type"]
            )
fig.show()

如果需要自定义对应类别的颜色,可以新增color_discrete_map参数配置,比如:

color_map = {
    "USA_A": "#1f77b4",
    "USA_B": "#aec7e8",
    "Canada_A": "#ff7f0e",
    "Canada_B": "#ffbb78"
}
# 绘图时传入color_discrete_map=color_map即可

方案2:使用graph_objects实现完全独立的双图例

如果需要两个独立的图例(一个控制国家、一个控制Type),可以用底层的plotly.graph_objects手动添加轨迹实现,灵活性更高:

import plotly.graph_objects as go
import pandas as pd

df = pd.read_csv("你的数据路径.csv", index_col=0)
countries = df["Country"].unique()
types = df["Type"].unique()
# 颜色配置:每个国家对应两个颜色,第一个对应Type A,第二个对应Type B
colors = {"USA": ["#1f77b4", "#aec7e8"], "Canada": ["#ff7f0e", "#ffbb78"]}

fig = go.Figure()

# 遍历每个国家和Type添加柱状轨迹
for country in countries:
    for i, typ in enumerate(types):
        filter_df = df[(df["Country"] == country) & (df["Type"] == typ)]
        fig.add_trace(go.Bar(
            x = filter_df["Year"],
            y = filter_df["Count"],
            name = f"{country} - {typ}",
            legendgroup = country,
            marker_color = colors[country][i]
        ))

fig.update_layout(barmode="group")
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:07