Агрегатные функции блокируют интерактивность графика в Altair - PullRequest
2 голосов
/ 01 августа 2020

Рассмотрим следующий код, адаптированный из: Веб-сайт Altair

import altair as alt
import pandas as pd

source = pd.DataFrame({
    'a': ['A', 'B', 'B', 'B', 'E', 'F', 'G', 'H', 'I'],
    'b': [28, 55, 43, 91, 81, 53, 19, 87, 52]
})

alt.Chart(source).mark_bar().encode(
    x='a',
    y='b:Q'
).interactive()

Выводит этот график:

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

Что является интерактивным (мы можем увеличивать масштаб). Однако, если я изменю поле кодировки Y на следующее (что мне и нужно) - добавив агрегатную функцию:

import altair as alt
import pandas as pd

source = pd.DataFrame({
    'a': ['A', 'B', 'B', 'B', 'E', 'F', 'G', 'H', 'I'],
    'b': [28, 55, 43, 91, 81, 53, 19, 87, 52]
})

alt.Chart(source).mark_bar().encode(
    x='a',
    y='sum(b):Q'
).interactive()

График больше не интерактивный . Можно ли сделать его интерактивным при использовании агрегатной функции , ie: перемещать, увеличивать, уменьшать масштаб?

Спасибо :)

1 Ответ

1 голос
/ 01 августа 2020

Это известное ограничение в Vega / Vega-Lite; см. https://github.com/vega/vega-lite/issues/5308

В качестве обходного пути вы можете передать предварительно агрегированные данные в диаграмму:

import altair as alt
import pandas as pd

source = pd.DataFrame({
    'a': ['A', 'B', 'B', 'B', 'E', 'F', 'G', 'H', 'I'],
    'b': [28, 55, 43, 91, 81, 53, 19, 87, 52]
})

data = source.groupby('a').sum().reset_index()

alt.Chart(data).mark_bar().encode(
    x='a',
    y=alt.Y('b', title='Sum of b')
).interactive()
...