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

如何在Altair中实现带可选择图例的多时间序列图表

Altair 多时间序列交互式图表实现方案

核心实现思路

通过多选选择器绑定图例,配合透明度控制隐藏未选中序列,同时强制保持图例样式不变,禁用图表区域的点击交互,完全满足需求:

  • 选择器仅绑定图例,只响应图例点击
  • 未选中序列完全隐藏(而非淡显),避免误触
  • 未选中序列的图例项保留且颜色与选中项一致
  • 点击图表区域不会改变选择状态

完整代码示例

import altair as alt
from vega_datasets import data

# 加载示例时间序列数据
source = data.stocks()

# 创建多选选择器:仅绑定图例,仅响应图例点击,默认显示所有序列
selection = alt.selection_multi(
    fields=['symbol'],
    bind='legend',
    on='click',
    empty='all'
)

# 构建交互式图表
chart = alt.Chart(source).mark_line().encode(
    x='date:T',
    y='price:Q',
    color='symbol:N',
    # 选中序列完全显示,未选中序列完全隐藏
    opacity=alt.condition(selection, alt.value(1), alt.value(0))
).add_params(
    selection
).configure_legend(
    # 强制未选中图例项保持原颜色和完全不透明
    symbolOpacity=1,
    symbolStrokeColor=alt.condition(selection, alt.value(None), alt.Color('symbol:N')),
    symbolFillColor=alt.condition(selection, alt.value(None), alt.Color('symbol:N'))
)

chart

关键细节说明

  • 选择器配置:bind='legend'将选择逻辑完全绑定到图例,on='click'确保只有点击图例才触发选择,彻底避免图表区域误触。
  • 序列显示控制:用opacity=0替代transform_filter,既隐藏未选中序列,又保留原始数据用于渲染完整图例,解决了过滤导致图例消失的问题。
  • 图例样式保持:通过configure_legend中的条件设置,让未选中的图例符号始终使用对应序列的原始颜色,且透明度为1,不会消失或变淡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:06:00