如何在 Altair 图表上组合两个滑块?

How to combine two sliders on Altair chart?

我有以下数据框:

   num_tra num_ts Year  Value
0      0    0      1     100
1      0    0      2     90
2      0    0      3     80
3      0    1      1     90
4      0    1      2     81
5      0    1      3     72
6      1    0      1     81
7      1    0      2     73
8      1    0      3     65
9      1    1      1     73
10     1    1      2     66
11     1    1      3     58
12     2    0      1     142
13     2    0      2     160
14     2    0      3     144
15     2    1      1     128
16     2    1      2     144
17     2    1      3     130

基于 Multiple Interactions Altair 示例,我尝试基于(在此示例中)基于列 num_tra [0 到 2] 和 num_ts [0] 的值构建一个带有两个滑块的图表到 1] 但它不起作用

import altair as alt
from vega_datasets import data

base = alt.Chart(df, width=500, height=300).mark_line(color="Red").encode(
    x=alt.X('Year:Q'),
    y='Value:Q',
    tooltip="Value:Q"
)

# Slider filter
tra_slider = alt.binding_range(min=0, max=2, step=1)
ts_slider = alt.binding_range(min=0, max=1, step=1)

slider1 = alt.selection_single(bind=tra_slider, fields=['num_tra'], name="TRA")
slider2 = alt.selection_single(bind=ts_slider, fields=['num_ts'], name="TS")

filter_TRA = base.add_selection(
    slider1,slider2
).transform_filter(
    slider1,slider2
).properties(title="Sensi_TRA")

filter_TRA

=> TypeError: transform_filter() 接受 2 个位置参数,但给出了 3 个

一个滑块没有问题,但如前所述,我无法在同一张图表上组合两个或多个滑块。

如果您有任何想法,我们将不胜感激。

有几种方法可以做到这一点。如果您希望按顺序应用过滤器,可以使用两个转换语句:

filter_TRA = base.add_selection(
    slider1,slider2
).transform_filter(
    slider1
).transform_filter(
    slider2
)

或者,您可以使用单个转换语句并使用 &| 运算符分别过滤滑块值的交集或并集:

filter_TRA = base.add_selection(
    slider1,slider2
).transform_filter(
    slider1 & slider2
)