Altair 散点图:除了大小 = 计数,我可以使用大小 = 百分比或比例之类的东西吗?

Altair scatter plot: Instead of size = count, can I have size = percent or proportion or something?

我正在按年龄绘制人们的满意度散点图:

alt.Chart(df).mark_circle().encode(
    alt.X('d2_age', bin = True),
    alt.Y('3_satisfied'),
    size = 'count()'
)

但是,我不想让每个标记的大小成为绝对计数,而是希望它成为该年龄段的比例或百分比。因此,您不会看到 300 名 60 多岁的人将他们的满意度评为 7,而是 50% 的 60 多岁的人。

是的,这是可能的,但对于这种计算,您必须通过 transforms 而不是通过编码快捷方式进行分箱和聚合。

以下是您询问的图表类型的示例:

import altair as alt
import pandas as pd
import numpy as np

rng = np.random.RandomState(1)

df = pd.DataFrame({
    'd2_age': rng.normal(40, 10, 100),
    '3_satisfied': rng.randint(1, 11, 100)
})

alt.Chart(df).transform_bin(
    'd2_age_binned', field='d2_age'
).transform_joinaggregate(
    total='count()',
    groupby=['d2_age_binned']
).transform_joinaggregate(
    in_group='count()',
    groupby=['d2_age_binned', '3_satisfied']
).transform_calculate(
    percentage=alt.datum.in_group / alt.datum.total
).mark_circle().encode(
    alt.X('d2_age_binned:Q', bin='binned'),
    alt.Y('3_satisfied'),
    alt.Size('percentage:Q', legend=alt.Legend(format='%', title='Percent in agegroup'))
)