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

如何让Altair图表Y轴随交互式图例选择自动缩放?

Altair实现选中系列时Y轴自动缩放方案

完全可行,你可以通过Altair的参数(param)和选择器联动来实现Y轴随选中系列自动缩放的效果,具体步骤和修改后的代码如下:

关键修改点

  • 调整选择器配置,支持Shift多选图例
  • 用动态参数存储选中系列的Y轴范围
  • 通过辅助图表实时计算选中数据的Y值极值并更新参数
  • 主图表Y轴绑定动态参数实现自动缩放

完整代码示例

import altair as alt

# 定义支持Shift多选的图例选择器
selection = alt.selection_point(
    fields=['datatype'],
    toggle='shift',  # 开启Shift键多选功能
    bind='legend'    # 将选择器绑定到图例点击事件
)

# 定义参数存储选中系列的Y轴范围
selected_y_domain = alt.param(
    name='selected_y_domain',
    value=[0, 1]  # 初始默认范围,会被后续计算覆盖
)

# 基础折线图配置
base = (
    alt.Chart(source)
    .mark_line(point=alt.OverlayMarkDef(color="red"))
    .encode(
        x=alt.X("date:T", axis=alt.Axis(format='%m/%d/%Y, %H:%M')),
        # Y轴绑定动态参数,实现自动缩放
        y=alt.Y("value:Q").scale(domain=alt.Param(selected_y_domain)),
        color="datatype:N",
        opacity=alt.condition(selection, alt.value(1), alt.value(0.2))
    ).add_selection(selection)
)

# 隐藏的辅助图表:计算选中系列的Y轴极值并更新参数
domain_calculator = alt.Chart(source).mark_rule(opacity=0).transform_filter(
    selection  # 仅保留选中的系列数据
).transform_aggregate(
    min_y='min(value)',
    max_y='max(value)',
).transform_calculate(
    domain="[datum.min_y, datum.max_y]"  # 将极值转为数组格式
).add_params(
    selected_y_domain
).encode(
    y=alt.Y().scale(domain=alt.Param(selected_y_domain))
).transform_event(
    'mousedown',  # 点击图例时触发更新
    update=selected_y_domain.update(expr='datum.domain')
)

# 组合主图表和辅助图表
final_chart = alt.layer(base, domain_calculator)
final_chart.show()

功能说明

  • 按住Shift点击图例中的系列标签,可以多选任意数量的系列
  • 每次选中/取消选中系列时,Y轴会自动计算当前选中数据的最小/最大值,调整范围让选中系列填满图表窗口
  • 未选中的系列会保持低透明度,不影响当前选中数据的查看

注意:如果你的Altair版本低于5.0,需要将selection_point替换为selection_multi,其余逻辑保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:40:33