Как отобразить нормализованные категории во всплывающей подсказке столбчатой диаграммы Altair

#altair

#altair

Вопрос:

Я создаю столбчатую диаграмму с накоплением, используя количество категориального поля в столбце dataframes.

  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")
            ]
        )
 

Как мне получить нормализованное количество во всплывающей подсказке?

Ответ №1:

До сих пор ваша диаграмма использовала сокращенные обозначения кодирования для вычисления различных агрегатов; для более сложных операций (например, отображения нормализованных значений во всплывающих подсказках) вам нужно будет использовать преобразования напрямую.

Вот пример отображения процентных значений для каждой группы во всплывающей подсказке с использованием диаграммы, аналогичной той, что вы показали выше:

 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%')
    ]
)
 

введите описание изображения здесь