Нажав штат, чтобы показать его округа в диаграмме Альтаир - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу иметь возможность щелкнуть по состоянию (одиночный или множественный выбор) и показать страны выбранных штатов, продолжая показывать невыбранные штаты. Я смог добиться этого, создав информационный фрейм, в котором я добавляю файл geo json фигур состояний к гео json форм округов.

census_area centroid_lat    centroid_lon    county_fips fips    geometry    geomlist    id  iso_3166_2  lsad    name    state   state_fips  state_only_fips

state_fips присутствует для каждого кортежа, где state_only_fips присутствует только для фигур состояния. Затем я строю свою карту со следующим кодом:

state_selection = alt.selection_single(empty='none', fields=['properties.state_only_fips'])

alt.Chart(combined_geo).mark_geoshape(stroke='black').encode(
).add_selection(
    state_selection
).transform_filter(
    {'not': state_selection}
).properties(
    width=900,
    height=700
).project("albersUsa")

Это правильно скрывает форму состояния и показывает основные округа, но работает плохо. Вместо того чтобы рендерить все графы штатов и и скрывать только выбранные фигуры штатов, я хочу, чтобы процесс выглядел следующим образом:

  1. Инициализировать диаграмму только с Отображение фигур состояний (обозначается значением state_only_fips или значением 'lsad' == 'State')

  2. Если щелкнуть по состоянию, скрыть выбранное состояние, продолжая отображать все остальные штаты

  3. Показывает формы округов выбранного штата. Отображение округов выбранного штата

Я чувствую, что это возможно, и диаграмма будет работать лучше, но я не уверен, как построить файл geo json и / или мой transform_filter

1 Ответ

0 голосов
/ 24 апреля 2020

Я наконец смог достичь этого, имея 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")


Вероятно, это можно было бы сделать более эффективным способом, но он работает с нагрузками лучше, чем раньше.

...