Как связать две гистограммы в Альтаире? - PullRequest
0 голосов
/ 21 ноября 2018

У меня проблемы с довольно простым взаимодействием, потому что я не очень хорошо понимаю язык альтаира.

Скажем, у меня есть фрейм данных, содержащий штат, округ и население.

Я хочу создать одну гистограмму, показывающую штаты и их население, а другую - графства и их население.

При нажатии на штат заполняется следующая гистограмма с названиями округов и их населением.При щелчке по любому состоянию на первой диаграмме графическая карта снова очищается.

Простая пара диаграмм мастер / деталь или контекст / фокус.

Кроме того, мне не ясно, как отлаживатьэто тоже.Есть ли способ напечатать выбранное состояние на консоль?

Вот некоторые данные, которые я извлек из Википедии (не могу поделиться фактическими рабочими данными): State,County,Land Area California,Los Angeles, 10510 Illinois,Cook, 2448 Texas,Harris, 4412 Arizona,Maricopa, 23828 California,San Diego, 10895 California,Orange, 2048 Florida,Miami-Dade, 4915 New York,Kings, 183 Texas,Dallas, 2257 New York,Queens, 281 California,Riverside, 18665 California,San Bernardino, 51947

Когда я нажимаю наБар, представляющий Калифорнию на первом графике, второй график должен заполнить Лос-Анджелес, Сан-Диего, Оранжевый, Риверсайд и Сан-Бернадино.Когда я нажимаю на Нью-Йорк на первом графике, на втором графике должны появиться Короли и Королевы.

1 Ответ

0 голосов
/ 22 ноября 2018

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

import altair as alt
import pandas as pd
from io import StringIO

states_str = """State,County,Land Area
California,Los Angeles, 10510 
Illinois,Cook, 2448 
Texas,Harris, 4412 
Arizona,Maricopa, 23828 
California,San Diego, 10895 
California,Orange, 2048 
Florida,Miami-Dade, 4915 
New York,Kings, 183 
Texas,Dallas, 2257 
New York,Queens, 281 
California,Riverside, 18665 
California,San Bernardino, 51947
"""

states_df = pd.read_csv(StringIO(states_str))

state_selector = alt.selection_multi(fields=['State'])

chart_states = alt.Chart(states_df).mark_bar().encode(
    x=alt.X('State:N'),
    y=alt.Y('count():Q')
).add_selection(state_selector)

chart_county = alt.Chart(states_df).mark_bar().encode(
    x=alt.X('County:N'),
    y=alt.Y('count():Q')
).transform_filter(state_selector)

chart_states | chart_county

Диаграмма, когда ничего не выбрано

enter image description here

График после нажатия на Калифорнию на первом графике.enter image description here

Создано в 2018-11-21 с помощью представительного пакета

...