Altair 限制条数

Altair limit number of bars

假设我有这样一个数据框

   label  counts
4      4       8
5      5       7
6      6       6
7      7       5
0      0       4
1      1       3
2      2       2
3      3       1

我想用altair做一个条形图,条形的高度是counts,label是label。如果我想要前 3 个计数,如何限制要显示的柱数?

我知道我可以让 df.sort_values("counts", ascending=False).iloc[:3] 成为图表的来源,但我想知道是否有直接使用 altair 进行此操作的方法。

您可以按照 Altair 文档中的 Top K Items 示例执行此操作。此处它应用于您的数据:

import altair as alt
import pandas as pd
from io import StringIO
df = pd.read_csv(StringIO("""
   label  counts
4      4       8
5      5       7
6      6       6
7      7       5
0      0       4
1      1       3
2      2       2
3      3       1
"""), delim_whitespace=True)

alt.Chart(df).transform_window(
    rank='rank(counts)',
    sort=[alt.SortField('counts', order='descending')]
).transform_filter(
    alt.datum.rank <= 3
).mark_bar().encode(
    x='counts:Q',
    y='label:O'
)