多重变换滤波器,Altair

Multiple Transform Filters, Altair

有没有什么方法可以让三个图表一起工作,其中任何一个的选择都会更新另一个?

这似乎只适用于两个图,因为据我所知,您只能附加一个变换过滤器。

例如

brush = alt.selection(type='interval')
nationality_select = alt.selection(type='single', fields=['Nationality'])
club_select = alt.selection(type='single', fields=['Club_Position'])

points = alt.Chart().mark_circle().encode(
x='Acceleration',
y='Speed',
color=alt.condition(brush, 'Nationality:N', alt.value('lightgray')),
tooltip=['Club_Position', 'Name']
).add_selection(
    brush
).transform_filter(
    nationality_select
)

bars_nationality = alt.Chart().mark_bar().encode(
    color='Nationality',
    x='count(Nationality)',
    y=alt.Y('Nationality',
        sort=alt.SortField(field='count', order='descending', op='max')
    )
).properties(
    selection=nationality_select
).transform_filter(
    brush
)

bars_club_position = alt.Chart().mark_bar().encode(
    color='Club_Position',
    x='count(Club_Position)',
    y=alt.Y('Club_Position',
    sort=alt.SortField(field='count', order='descending', op='max')
    )
).properties(
    selection=club_select
).transform_filter(
    brush
)

alt.vconcat(points, bars_nationality, bars_club_position, d 
data=fifa.sample(2000))

例如我不能这样做

.transform_filter(
    brush, nationality_filter
)

那么有什么方法可以加倍吗?

您可以通过多次调用 transform_filter 向图表添加任意数量的过滤器转换。例如:

chart.transform_filter(
    selection1
).transform_filter(
    selection2
)

所有转换将按照添加到图表中的顺序应用。

另一种可能的方法是使用布尔逻辑在单个过滤器转换中组合多个选择;例如

chart.transform_filter(
    selection1 & selection2
)

在您的情况下,这应该具有相同的效果。