如何在Altair中链接两个条形图?

时间:2018-11-21 03:24:05

标签: vega altair

我在进行相当简单的交互时遇到了麻烦,因为我不太了解Altair的语言。

说我有一个包含州,县和人口的数据框。

我想创建一个条形图,显示州及其人口,另一幅条形图,显示县及其人口。

单击一个州会在下一个条形图中填充县名及其人口。在第一张图表中的任意一个州上单击鼠标左键即可再次清空县图表。

简单的主/详细或上下文/焦点对图表。

此外,我也不清楚如何调试它。有没有办法将所选状态打印到控制台?

以下是我从维基百科提取的一些数据(无法共享实际的工作数据): 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

当我单击第一张图表中代表加利福尼亚的条形图时,第二张图表应填充洛杉矶,圣地亚哥,奥兰治,里弗赛德和圣贝纳迪诺。当我在第一个图表中单击“纽约”时,第二个图表应填充有Kings和Queens。

1 个答案:

答案 0 :(得分:1)

这就是您想要的,我相信。这个想法是在图表上创建一个选择,然后使用它来过滤第二个选择。

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

reprexpy package

创建于2018-11-21