如何在 altair 中 link 两个条形图?
How to link two bar charts in altair?
我在进行相当简单的交互时遇到了问题,因为我不太了解 altair 的语言。
假设我有一个包含州、县和人口的数据框。
我想创建一个显示各州及其人口的条形图,另一个显示县及其人口的条形图。
点击一个州会在下一个条形图中显示县名及其人口。在第一个图表中远离任何州单击会再次清空县图表。
简单 master/detail 或 context/focus 一对图表。
此外,我也不清楚如何调试它。有没有办法将选中的状态打印到控制台?
这是我从维基百科中提取的一些数据(无法共享实际工作数据):
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
当我单击第一个图表中代表加利福尼亚的条形图时,第二个图表中应填充洛杉矶、圣地亚哥、奥兰治、里弗赛德和圣贝纳迪诺。当我在第一个图表中单击纽约时,第二个图表应该填充国王和皇后区。
我相信这就是你想要的。这个想法是在图表上创建一个选择,并用它来过滤第二个。
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
未选择任何内容时的图表
在第一个图表上单击加利福尼亚后的图表。
于 2018-11-21 创建
我在进行相当简单的交互时遇到了问题,因为我不太了解 altair 的语言。
假设我有一个包含州、县和人口的数据框。
我想创建一个显示各州及其人口的条形图,另一个显示县及其人口的条形图。
点击一个州会在下一个条形图中显示县名及其人口。在第一个图表中远离任何州单击会再次清空县图表。
简单 master/detail 或 context/focus 一对图表。
此外,我也不清楚如何调试它。有没有办法将选中的状态打印到控制台?
这是我从维基百科中提取的一些数据(无法共享实际工作数据):
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
当我单击第一个图表中代表加利福尼亚的条形图时,第二个图表中应填充洛杉矶、圣地亚哥、奥兰治、里弗赛德和圣贝纳迪诺。当我在第一个图表中单击纽约时,第二个图表应该填充国王和皇后区。
我相信这就是你想要的。这个想法是在图表上创建一个选择,并用它来过滤第二个。
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
未选择任何内容时的图表
在第一个图表上单击加利福尼亚后的图表。