python - 如何通过 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)
有没有办法通过给出条件来实现过滤所需数据的功能?
解决方案
为了在过滤器变换中引用聚合,需要在聚合变换中而不是在编码速记中进行计算。
像这样的东西应该工作:
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()
推荐阅读
- javascript - 无法显示 {
胡说八道
} 反应为
标签显示在浏览器中
- maven - 配置多个 Maven 存储库
- html - CSS网格间距的问题
- gradle - Gradle 构建问题:无法在咖啡因模拟器中获取未知属性“库”
- c++ - C++ 字符串到 C 字符串
- c# - 问题:在 .Net Core 3.1 中引用 .Net Standard 2.1 项目
- asp.net - Asp.net - 如何为每个用户创建一个页面
- r - R中的并行稀疏矩阵cor(x,y)
- python - 我可以在使用 selenium 之前登录 gmail 以单击 gmail 菜单吗?
- php - 提交表单后,浏览器后退按钮应重定向到上一页