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

如何基于Category/Subcategory为Plotly折线图正确着色?实操问题求助

Plotly折线图按Category设置颜色异常的解决办法

数据示例

Category    Subcategory Date    Value
0   Category A  Subcategory A1  01/01/2016  31250
1   Category A  Subcategory A1  01/02/2016  32250
2   Category A  Subcategory A1  01/01/2017  32500
3   Category A  Subcategory A1  01/02/2017  33000
4   Category A  Subcategory A1  01/01/2018  32500

问题场景

需要创建折线图展示各Subcategory的数据,要求线条颜色根据Category设置,但直接设置color="Category"时出现异常:所有数据点被合并成一条折线,无法区分不同的Subcategory;而设置color="Subcategory"时能正常展示折线,但不符合颜色按Category定义的需求。

异常代码及表现

fig = px.line(
    df,
    x="Date",
    y="Value",
    color="Category",
    # color="Subcategory",
)
fig.show()

结果:图表仅显示一条折线,无法区分各Subcategory的数据。

正常代码及表现

fig = px.line(
    df,
    x="Date",
    y="Value",
    # color="Category",
    color="Subcategory",
)
fig.show()

结果:每个Subcategory对应一条折线,但颜色按Subcategory区分,不符合需求。

解决办法

问题核心是Plotly Express的分组逻辑:默认情况下,color参数同时承担分组和颜色定义的作用。要实现「按Subcategory分组画折线,按Category设颜色」,需要明确指定分组依据。

方法1:使用line_group参数(推荐)

通过line_group="Subcategory"明确告诉Plotly按Subcategory分组绘制折线,同时用Category设置颜色:

fig = px.line(
    df,
    x="Date",
    y="Value",
    color="Category",
    line_group="Subcategory"  # 关键:指定折线分组依据
)
fig.show()

方法2:手动添加Trace实现自定义颜色映射

如果需要更灵活的颜色控制,可直接使用Plotly Graph Objects手动遍历每个Subcategory,指定对应Category的颜色:

import plotly.graph_objects as go

# 定义Category到颜色的映射关系
category_colors = {
    "Category A": "#1f77b4",
    # 可添加更多Category的颜色定义
}

fig = go.Figure()
# 遍历每个唯一的Subcategory
for subcat in df["Subcategory"].unique():
    sub_data = df[df["Subcategory"] == subcat]
    # 获取当前Subcategory所属的Category对应的颜色
    line_color = category_colors[sub_data["Category"].iloc[0]]
    # 添加折线Trace
    fig.add_trace(go.Scatter(
        x=sub_data["Date"],
        y=sub_data["Value"],
        name=subcat,
        line=dict(color=line_color)
    ))

fig.update_layout(title="Subcategory数据按Category着色")
fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:11:20