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

Plotly中如何按颜色批量隐藏/显示同色系图表数据

Plotly中如何按颜色批量隐藏/显示同色系图表数据

嗨,这个需求完全可以实现!Plotly默认的图例是按单个系统(也就是每个trace)单独控制显示/隐藏的,但咱们可以通过设置图例分组和自定义点击行为,轻松实现按颜色批量控制同色系数据的显示状态,下面给你两种实用的方案,先看最直接的纯Plotly静态图方案:

方案一:利用图例分组(Legend Group)实现批量控制

这个方法不需要额外依赖,纯Plotly就能搞定,核心思路是把同颜色的系统归为同一个图例组,然后设置点击图例组时批量切换所有同组数据的显示状态。

完整代码示例

import plotly.express as px
import pandas as pd
import numpy as np

# 补全你的数据,增加Value列用于绘图(你可以替换成自己的实际数据列)
data = {
    "System": ["System 1", "System 1", "System 1", "System 2", "System 2", "System 3", "System 3", "System 3", "System 4", "System 4"],
    "Year": [2020, 2020, 2020, 2021, 2020, 2020, 2020, 2021, 2019, 2021],
    "Value": np.random.randint(10, 50, size=10)
}

df = pd.DataFrame(data)

# 第一步:定义颜色映射,把要归为同色系的系统设置相同颜色
color_map = {
    "System 1": "blue",
    "System 2": "blue",
    "System 3": "red",
    "System 4": "green"
}

# 第二步:绘图,应用颜色映射
fig = px.scatter(df, x="Year", y="Value", color="System", color_discrete_map=color_map)

# 第三步:给同颜色的trace设置相同的图例组
for trace in fig.data:
    # 获取当前trace的颜色
    trace_color = trace.marker.color
    # 将同颜色的trace归为同一个组
    trace.legendgroup = trace_color
    
    # 可选优化:同一颜色组只显示一个图例项,避免图例冗余
    # 找到当前颜色对应的第一个系统名称,只让它显示图例
    first_system_in_group = next(k for k, v in color_map.items() if v == trace_color)
    if trace.name == first_system_in_group:
        trace.showlegend = True
    else:
        trace.showlegend = False

# 第四步:设置图例点击行为为「切换整个组」
fig.update_layout(
    legend=dict(
        groupclick="togglegroup",  # 点击图例项时切换整个组的显示/隐藏
        title="颜色分组控制"  # 可以自定义图例标题
    )
)

fig.show()

效果说明

  • 图例里只会显示每个颜色对应的第一个系统(比如蓝色对应System 1),点击这个图例项,所有蓝色的系统(System 1和System 2)会一起隐藏/显示
  • 如果你想保留所有系统的图例项(同时支持单个系统和颜色组控制),可以去掉第三步里的showlegend设置,这样每个系统都会在图例里显示,点击任意一个同组的图例项,整个颜色组都会切换状态

方案二:用Dash做更灵活的控制(可选)

如果需要更复杂的交互(比如单独的颜色控制按钮),可以结合Plotly Dash来实现,比如添加下拉框或按钮,点击后批量设置对应颜色trace的可见性。不过这个需要搭建Dash应用,适合需要更定制化交互的场景,如果你只是需要静态图的话,方案一完全够用啦。

备注:内容来源于stack exchange,提问作者Puje

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:19:38