Альтаир добавляет ползунок даты для интерактивной диаграммы разброса - PullRequest
2 голосов
/ 27 мая 2020

Кто-нибудь пробовал использовать дату в качестве слайдера для интерактивных точечных графиков Альтаира?

Я пытаюсь воспроизвести график, аналогичный разбросу разрыва: 1) Вместо фильтра по годам я пытаюсь использовать дату, например, «2020-01-05», и получаю следующую ошибку:

    altair.vegalite.v4.schema.core.BindRange->max, validating 'type'

    '2020-05-17T00:00:00' is not of type 'number'

2) Когда я пытаюсь разобрать его как int, на графике ничего не отображается 3) Примеры использования ползунка Год: https://www.datacamp.com/community/tutorials/altair-in-python https://altair-viz.github.io/gallery/multiple_interactions.html 4) Также вариант с отметкой времени не был бы идеальным, так как дата должна быть читаемой. Буду признателен за любую помощь. Спасибо

#Date Slider
from altair import datum
from datetime import datetime
import altair as alt
import pandas as pd
import numpy as np
import datetime as dt

date_slider = alt.binding_range(min=min(df['date']), max=max(df['date']), step=1)
slider_selection = alt.selection_single(bind=date_slider, fields=['date'], name="Date", init={'week_starting': max(df[‘date’]})

alt.Chart(df).mark_point(filled=True).encode(
    x='mom_pct',
    y='yoy_pct',
    size='n_queries',
    color='vertical',
    tooltip = ['vertical', 'yoy_pct', 'mom_pct']
).properties(
    width=800,
    height=600
).add_selection(slider_selection).transform_filter(slider_selection)

1 Ответ

1 голос
/ 27 мая 2020

Ползунки Vega-Lite не поддерживают отображение даты и времени, но можно отображать отметки времени. Вот полный пример (я не основывал его на вашем коде, потому что вы не предоставили никаких данных):

import altair as alt
import pandas as pd
import numpy as np
from datetime import datetime

datelist = pd.date_range(datetime.today(), periods=100).tolist()

rand = np.random.RandomState(42)

df = pd.DataFrame({
    'xval': datelist,
    'yval': rand.randn(100).cumsum(),
})

def timestamp(t):
  return pd.to_datetime(t).timestamp() * 1000

slider = alt.binding_range(name='cutoff:', min=timestamp(min(datelist)), max=timestamp(max(datelist)))
selector = alt.selection_single(name="SelectorName", fields=['cutoff'],
                            bind=slider,init={"cutoff": timestamp("2020-05-05")})

alt.Chart(df).mark_point().encode(
    x='xval',
    y='yval',
    opacity=alt.condition(
        'toDate(datum.xval) < SelectorName.cutoff[0]',
        alt.value(1), alt.value(0)
    )
).add_selection(
    selector
)

enter image description here

К сожалению, в настоящее время Vega-Lite не предоставляет никакого собственного способа создания слайдера, отображающего отформатированную дату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...