如何在 Altair 堆积条形图工具提示中显示标准化类别

How to display normalized categories in Altair stacked bar chart tooltip

我正在使用数据帧列中分类字段的计数创建堆积条形图。

 chart = alt.Chart(df2).mark_bar().encode(
            x="take__take:O",
            y=alt.Y('count(name)', stack="normalize", axis=alt.Axis(title="Percent", format="%")),
            color=alt.Color('name', sort=alt.EncodingSortField('value', order='descending')),
            order=alt.Order(
                'value',
                sort="ascending"
            ),
            tooltip=[
                alt.Tooltip('count(name)', title="Total Students")
            ]
        )

我将如何在工具提示中获取标准化计数?

到目前为止,您的图表使用编码速记来计算各种聚合;对于更复杂的操作(比如在工具提示中显示标准化值),您需要直接使用 transforms

这是在工具提示中显示每组百分比的示例,使用的图表与您在上面显示的类似:

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

np.random.seed(0)

df2 = pd.DataFrame({
    'name': np.random.choice(['A', 'B', 'C', 'D'], size=100),
    'value': np.random.randint(0, 20, 100),
    'take__take': np.random.randint(0, 5, 100)
})

alt.Chart(df2).transform_aggregate(
    count='count()',
    groupby=['name', 'take__take']
).transform_joinaggregate(
    total='sum(count)',
    groupby=['take__take']  
).transform_calculate(
    frac=alt.datum.count / alt.datum.total
).mark_bar().encode(
    x="take__take:O",
    y=alt.Y('count:Q', stack="normalize", axis=alt.Axis(title="Percent", format="%")),
    color='name:N',
    tooltip=[
        alt.Tooltip('count:Q', title="Total Students"),
        alt.Tooltip('frac:Q', title="Percentage of Students", format='.0%')
    ]
)