Я пытаюсь создать в Altair спецификацию Vega-Lite для сюжета временного ряда, временной диапазон которого охватывает несколько дней. Поскольку в моем случае будет ясно, какой сегодня день, я хочу уменьшить шум в метках оси, позволив меткам иметь форму '%H:%M'
, даже если это приводит к тому, что метки не различаются.
Вот некоторые примеры данных; мои фактические данные имеют пятиминутное разрешение, но я думаю, что здесь это не будет иметь большого значения:
import altair as alt
import numpy as np
import pandas as pd
# Create data spanning 30 hours, or just over one full day
df = pd.DataFrame({'time': pd.date_range('2018-01-01', periods=30, freq='H'),
'data': np.arange(30)**.5})
Используя тривиальное преобразование yearmonthdatehoursminutes
, я получаю следующее:
alt.Chart(df).mark_line().encode(x='yearmonthdatehoursminutes(time):T',
y='data:Q')
Теперь моя цель - избавиться от дат в метках на горизонтальной оси, чтобы они стали чем-то вроде ['00:00', '03:00', ..., '21:00', '00:00', '03:00']
или любым другим интервалом работает лучше всего.
Наивный подход, заключающийся в использовании hoursminutes
в качестве преобразования, не сработает, так как он объединяет фактические данные:
alt.Chart(df).mark_line().encode(x='hoursminutes(time):T', y='data:Q')
Итак, есть ли декларативный способ сделать это? В конечном счете, визуализация будет использовать выборки для определения границ горизонтальной оси, поэтому явное указание меток с помощью Axis
не кажется привлекательным.