如何修复Altair图表中的timeUnit错误

时间:2019-04-22 13:58:57

标签: python pandas altair

我正在尝试在Altair中绘制时间序列图,并且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 :(得分:0)

将整数值传递给时间编码时,会将其视为unix时间戳(即,自1970年1月1日以来的毫秒数)。

如果要从整数年构造一个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')
)