小编Era*_* P.的帖子

Altair/Vega-Lite 条形图:从聚合字段中过滤前 K 个条形图

例如,我正在可视化一个具有分类字段的数据集。我想创建一个条形图,显示该字段的不同类别及其基数,按“升序”/“降序”顺序排序。这可以简单地通过以下方式实现altair

\n\n
import pandas as pd\nimport altair as alt\n\ndata = {0:{\'Name\':\'Mary\', \'Sport\':\'Tennis\'},\n    1:{\'Name\':\'Cal\', \'Sport\':\'Tennis\'},\n    2:{\'Name\':\'John\', \'Sport\':\'Tennis\'},\n    3:{\'Name\':\'Jane\', \'Sport\':\'Tennis\'},\n    4:{\'Name\':\'Bob\', \'Sport\':\'Golf\'},\n    5:{\'Name\':\'Jerry\', \'Sport\':\'Golf\'},\n    6:{\'Name\':\'Gustavo\', \'Sport\':\'Golf\'},\n    7:{\'Name\':\'Walter\', \'Sport\':\'Swimming\'},\n    8:{\'Name\':\'Jessy\', \'Sport\':\'Swimming\'},\n    9:{\'Name\':\'Patric\', \'Sport\':\'Running\'},\n    10:{\'Name\':\'John\', \'Sport\':\'Shooting\'}}\n\ndf = pd.DataFrame(data).T\n\nbars = alt.Chart(df).mark_bar().encode(\n    x=alt.X(\'count():Q\', axis=alt.Axis(format=\'.0d\', tickCount=4)),\n    y=alt.Y(\'Sport:N\', \n        sort=alt.SortField(op=\'count\', field=\'Sport:N\', order=\'descending\'))\n)\nbars\n
Run Code Online (Sandbox Code Playgroud)\n\n

条形图(完整)

\n\n

现在假设我只对前三个最多的类别感兴趣。使用“transform_window”和 \xe2\x80\x9ctransform_filter\xe2\x80\x9d 来过滤数据似乎是合理的,但我无法找到一种方法来这样做。我还尝试了Vega-Lite Top K 示例,尝试对其进行调整,但没有成功(我的“最佳”尝试如下所示)。

\n\n
bars.transform_window(window=[alt.WindowFieldDef(op=\'count\', \n                                                 field=\'Sport:N\',\n                                                 **{\'as\':\'cardinality\'})],\n                      frame=[None, None])\n\nbars.transform_window(window=[alt.WindowFieldDef(op=\'rank\',\n                                                 field=\'cardinality\',\n                                                 **{\'as\':\'rank\'})],\n                      frame=[None, None],\n                      sort=[alt.WindowSortField(field=\'rank\',\n                                                order=\'descending\')])\n\nbars.transform_filter( ..... what??? .....)\n
Run Code Online (Sandbox Code Playgroud)\n

python vega vega-lite altair

2
推荐指数
1
解决办法
1652
查看次数

标签 统计

altair ×1

python ×1

vega ×1

vega-lite ×1