如何通过Altair图表中的条件选择一部分数据

时间:2018-09-18 11:07:38

标签: python data-visualization altair

我想过滤一个条件下的部分数据。 Altair可以吗?

我正在使用以下代码绘制图表。

alt.Chart(deliveries).mark_bar().encode(
    alt.X('batsman', sort=alt.EncodingSortField(field='sum(batsman_runs)', op='count', order='descending')),
    alt.Y('sum(batsman_runs)'),
    tooltip=['batsman', 'sum(batsman_runs)']
).properties(height=600, width=3000).interactive()

但是因为有很多数据,所以我的图表中有很多条形图。我想通过提供类似条件来限制图表中的条形,例如显示那些得分超过4000的击球手的数据。

我尝试使用transform_filter(),但不适用于聚合函数(我在这里使用'sum')。

alt.Chart(deliveries).mark_bar().encode(
    alt.X('batsman', sort=alt.EncodingSortField(field='sum(batsman_runs)', op='count', order='descending')),
    alt.Y('sum(batsman_runs)'),
    tooltip=['batsman', 'sum(batsman_runs)']
).properties(height=600, width=3000).interactive().transform_filter(datum.sum(batsman_runs) > 4000)

是否可以通过提供条件来实现过滤所需数据的功能?

1 个答案:

答案 0 :(得分:0)

为了在过滤器变换中引用聚合,需要在聚合变换中而不是在编码速记中进行计算。

类似的事情应该起作用:

alt.Chart(deliveries).transform_aggregate(
    total_runs='sum(batsman_runs)',
    groupby=['batsman']
).transform_filter(
    "datum.total_runs > 4000"
).mark_bar().encode(
    alt.X('batsman:Q', sort=alt.EncodingSortField(field='total_runs', op='count', order='descending')),
    alt.Y('total_runs:Q'),
    tooltip=['batsman:Q', 'total_runs:Q']
).properties(height=600, width=3000).interactive()