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'))
)
我正在按年龄绘制人们的满意度散点图:
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'))
)