как выбрать часть данных по условию в диаграмме Альтаира - PullRequest
0 голосов
/ 18 сентября 2018

Я бы хотел отфильтровать часть данных, которые у меня есть, по условию.Возможно ли это с Altair?

Я использую приведенный ниже код для построения графика.

alt.Chart(deliveries).mark_bar().encode(
    alt.X('batsman', sort=alt.EncodingSortField(field='sum(batsman_runs)', op='count', order='descending')),
    alt.Y('sum(batsman_runs)'),
    tooltip=['batsman', 'sum(batsman_runs)']
).properties(height=600, width=3000).interactive()

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

Я пытался использовать transform_filter (), но не работал с агрегатными функциями (я использую«сумма» здесь).

alt.Chart(deliveries).mark_bar().encode(
    alt.X('batsman', sort=alt.EncodingSortField(field='sum(batsman_runs)', op='count', order='descending')),
    alt.Y('sum(batsman_runs)'),
    tooltip=['batsman', 'sum(batsman_runs)']
).properties(height=600, width=3000).interactive().transform_filter(datum.sum(batsman_runs) > 4000)

Есть ли способ реализовать эту функцию, отфильтровывая требуемые данные, задав условие?

1 Ответ

0 голосов
/ 19 сентября 2018

Чтобы сослаться на агрегат в преобразовании фильтра, его нужно вычислить в преобразовании агрегата, а не в сокращенной кодировке.

Примерно так должно работать:

alt.Chart(deliveries).transform_aggregate(
    total_runs='sum(batsman_runs)',
    groupby=['batsman']
).transform_filter(
    "datum.total_runs > 4000"
).mark_bar().encode(
    alt.X('batsman:Q', sort=alt.EncodingSortField(field='total_runs', op='count', order='descending')),
    alt.Y('total_runs:Q'),
    tooltip=['batsman:Q', 'total_runs:Q']
).properties(height=600, width=3000).interactive()
...