Я наконец смог достичь этого, имея 2 выбора: 1 для проверки выбранных штатов и один для проверки округов выбранных штатов. Чтобы показать состояния, я показываю только фигуры, которые классифицированы как «Штат» и еще не были нажаты. Выбор сделан на state_only_fips , который присутствует только для фигур состояния.
state_selection = alt.selection_multi(empty='none', fields=['properties.state_only_fips'], clear='dblclick')
{'and' : [('datum[\'properties.lsad\'] == \'State\''), {'not': state_selection}]}
Я добавил второй выбор на state_fips , который включен для каждая форма. В формах состояния это значение совпадает с state_only_fips . Этот второй фильтр также отфильтровывает все фигуры, не классифицированные как «Состояние».
county_selection = alt.selection_multi(empty='none', fields=['properties.state_fips'], clear='dblclick')
{'and' : [('datum[\'properties.lsad\'] !== \'State\''), county_selection]}
Наконец, мы объединяем эти два утверждения с предикатом или . Конечный продукт выглядит следующим образом:
county_selection = alt.selection_multi(empty='none', fields=['properties.state_fips'], clear='dblclick')
state_selection = alt.selection_multi(empty='none', fields=['properties.state_only_fips'], clear='dblclick')
base_chart = alt.Chart().mark_geoshape(stroke='black').encode(
).add_selection(
state_selection,
county_selection
).transform_filter(
{'or': [{'and' : [('datum[\'properties.lsad\'] == \'State\''), {'not': state_selection}]}
,{'and' : [('datum[\'properties.lsad\'] !== \'State\''), county_selection]}]}
).properties(
width=900,
height=700
).project("albersUsa")
Вероятно, это можно было бы сделать более эффективным способом, но он работает с нагрузками лучше, чем раньше.