Altair 限制分面图表中的条形数量

Altair limit number of bars in facet chart

假设我有一个像这样的 pandas 数据框:

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

我想用altair做一个条形图,条形的高度是counts,label是label。我想按 group 列添加一个方面。如果我想要每个子图表的前 3 个计数,我该如何限制要显示的柱数?

希望我不想在 pandas 中对数据框执行操作,而是使用手边的 altair 工具来执行此操作。

您可以使用与 , but use the groupby argument in the window transform 中相同的方法来执行此操作:

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

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