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'
)
假设我有一个像这样的 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 工具来执行此操作。
您可以使用与 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'
)