Как исправить ошибку timeUnit на графике Альтаира - PullRequest
0 голосов
/ 22 апреля 2019

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

У меня есть набор данных, который выглядит следующим образом:

import pandas as pd
data = pd.DataFrame({'year': [2011, 2012], 'value': [5000, 10000]})

Out:
    year    value
0   2011    5000
1   2012    10000

И я хотел бы построить временной рядзначение.Я попытался использовать параметр timeUnit следующим образом:

import altair as alt

alt.Chart(data).mark_line(point = True).encode(
    x = alt.X('year:T',
             timeUnit = 'year'),
    y = alt.Y('value:Q')
)

Но он не правильно отображает ось X: chart_option .Если я уберу опцию timeUnit, она мало поможет: chart_no_option .

1 Ответ

0 голосов
/ 22 апреля 2019

Когда вы передаете целочисленное значение во временную кодировку, оно обрабатывает его как метку времени Unix (т.е. миллисекунды с 1 января 1970 года).

Если вы хотите создать объект datetime из целых лет, вы можетеСделайте это, предварительно обработав данные пандами для создания столбца DateTime:

import altair as alt
import pandas as pd

data = pd.DataFrame({'year': [2011, 2012], 'value': [5000, 10000]})
data['date'] = pd.to_datetime(data['year'], format='%Y')

alt.Chart(data).mark_line(point = True).encode(
    x = alt.X('date:T', timeUnit = 'year'),
    y = alt.Y('value:Q')
)

или, если вы хотите избежать предварительной обработки данных, вы можете использовать преобразование вычисления непосредственно в Altair:

import altair as alt
import pandas as pd
data = pd.DataFrame({'year': [2011, 2012], 'value': [5000, 10000]})

alt.Chart(data).transform_calculate(
    date='datetime(datum.year, 1, 1)'  # (year, month, date)
).mark_line(point = True).encode(
    x = alt.X('date:T', timeUnit = 'year'),
    y = alt.Y('value:Q')
)
...