Гистограмма с накоплением. Создать одну интегрированную подсказку с информацией из всех категорий (Альтаир) - PullRequest
1 голос
/ 11 января 2020

В настоящее время подсказка на моем графике является отдельной для каждой «стопки» / категории бара.

Я хотел бы создать единую подсказку, которая отображает одинаковую интегрированную информацию из всех категорий в любом месте одной и той же бар. Например:

  • Дата (год): 2020
  • Количество (всего): 2
  • Количество 'true': 1
  • Count ' false ': 1
  • %' true ': 50%

Возможно ли это на Альтаире? Ниже код и вывод у меня сейчас.

import altair as alt
import pandas as pd

df = pd.DataFrame({
    'date': ['20-03-2017', '20-03-2017', '20-03-2018', '21-03-2018', '20-10-2019', '20-03-2019', '1-02-2019', '10-03-2020', '20-06-2020'],
    'value': [True, True, True, False, True, False, False, True, False]
})

df['date'] = pd.to_datetime(df['date'])

alt.Chart(df).mark_bar().encode(
    x = 'year(date):O',
    y = 'count(value)',
    color = 'value',
    tooltip = ['year(date)', 'count(value)']
)

output

1 Ответ

1 голос
/ 11 января 2020

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

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

alt.Chart(df).transform_timeunit(
    year='year(date)'
).transform_joinaggregate(
    count='count(value)',
    count_true='sum(value)',
    groupby=['year']
).transform_calculate(
    count_false = "datum.count - datum.count_true"
).mark_bar(opacity=1).encode(
    x='year(date):O',
    y='count():Q',
    color='value',
    tooltip=['year(date):O', 'count:Q', 'count_true:Q', 'count_false:Q']
)

enter image description here

...