Данные преобразования слайдера Altair

Уже пару недель я наслаждаюсь использованием Altair, но я застрял в том, как решить проблему. Я пытался сделать простой график средних временных данных по сравнению с месяцем и использовал виджет ползунка для фильтрации по годам. Я могу заставить график работать, но как только я использую опцию ползунка, он не показывает никаких данных. Я пробовал просто использовать опцию выбора, но это не сработало. Я просто не знаю, как обращаться с опцией преобразования. Я использую пример Население США во времени в качестве руководства.

import altair as alt
from altair.expr import datum, if_
alt.renderers.enable('notebook')
path = 'https://raw.githubusercontent.com/SpiritR/datpr6754/master/prtas_1901_2015.csv'


slider = alt.binding_range(min=1900, max=2020, step=10)
year = alt.selection_single(name="year", fields=['Year'], bind=slider)

alt.Chart(path).mark_bar().encode(
    alt.X('Month_Name:O'),
    alt.Y('tas:Q', scale=alt.Scale(domain=(20, 28))),
).properties(
    width=900,
    height=300,
).add_selection(
    year
).transform_calculate(
   ????
).transform_filter(
    year.ref()
)

person Cort.Riv    schedule 17.08.2018    source источник


Ответы (1)


Данные CSV анализируются как строки, а не числа. Когда вы используете ползунок для выбора даты (скажем, 1959), он фильтрует данные, чтобы проверить, какие значения равны этому ... и поскольку данные являются строками, "1959" != 1959 и результирующее подмножество пусто.

Вы можете принудительно проанализировать столбец как число, и тогда ползунок будет работать правильно. Например:

import altair as alt
alt.renderers.enable('notebook')

path = 'https://raw.githubusercontent.com/SpiritR/datpr6754/master/prtas_1901_2015.csv'
data = alt.UrlData(url=path, format=alt.CsvDataFormat(parse={'Year': 'number'}))

slider = alt.binding_range(min=1901, max=2015, step=1)
year = alt.selection_single(name="year", fields=['Year'], bind=slider)

alt.Chart(data).mark_bar().encode(
    alt.X('Month_Name:O'),
    alt.Y('tas:Q', scale=alt.Scale(domain=(20, 28))),
).properties(
    width=900,
    height=300,
).add_selection(
    year
).transform_filter(
    year
)
person jakevdp    schedule 18.08.2018
comment
Большое спасибо!! Я знаю, что мне просто не хватало :( Теперь работает отлично. Спасибо за отличную поддержку. - person Cort.Riv; 18.08.2018
comment
Извините за уточняющий вопрос, но есть ли способ сделать так, чтобы выбор начался в определенный момент (в данном случае год)? по умолчанию - все (или ничего), пока ползунок не переместится. - person Cort.Riv; 19.08.2018
comment
Нет, на данный момент, к сожалению, нет. Здесь сообщается об ошибке: github.com/altair-viz/altair/issues/ 599 - person jakevdp; 20.08.2018