我想过滤一个条件下的部分数据。 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)
是否可以通过提供条件来实现过滤所需数据的功能?
答案 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()