Как изменить временной интервал на линейном графике altair

У меня есть простой линейный график, который выглядит так: линейный график доходности акций

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

Код:

alt.Chart(data).mark_line().encode(
    x = alt.X('Date', timeUnit = 'year'),
    y = alt.Y('Cumul_R', axis = alt.Axis(format='%', orient='right')),

    color = 'Stock')

Я пытаюсь создать график, который выглядит как первый график, но с интервалами, выраженными в годах, например, 06-2010, 06-2011, ... и т. Д. Без сжатия графика, как на втором рисунке. Другими словами, как мне показать только некоторые метки, а не все?

Я видел ответы на свой вопрос, но они имеют дело с абсолютными значениями с помощью tickCount или tickMinStep, а не для значений datetime. Очевидно, есть атрибут altair, называемый timeinterval, в https://altair-viz.github.io/user_guide/generated/core/altair.TimeInterval.html#altair.TimeInterval. init, который может решить проблему, но я м не знаю, как его использовать.

Благодарю за любую помощь в этом вопросе. Спасибо!


person tianfangyetan    schedule 22.05.2020    source источник
comment
Включите минимальный воспроизводимый пример. В частности, ответ на ваш вопрос будет зависеть от того, как отформатированы ваши данные, поэтому без этой информации будет сложно ответить на ваш вопрос.   -  person jakevdp    schedule 22.05.2020


Ответы (1)


Похоже, что вы наносите даты как номинальные типизированные значения, тогда как вам, вероятно, следует строить их как временные.

Вы должны изменить x = alt.X('Date') на x = alt.X('Date:T'), чтобы указать, что канал x является временным. Когда вы это сделаете, средство визуализации будет использовать метку временной оси, которая, вероятно, ближе к тому, что вы имели в виду.

Для получения дополнительной информации см. Типы данных кодирования в документации. .

person jakevdp    schedule 22.05.2020