如何修复牵牛星图中的时间单位错误



我正在尝试在 Altair 中绘制时间序列图表,但 x 轴没有按预期显示。时间单位选项将我的所有观察设置在同一个 x 轴点上。

我有一个数据集,看起来像这样:

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

我想绘制一个价值的时间序列。我尝试使用时间单位选项,如下所示:

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。如果我删除时间单位选项,它没有多大帮助:chart_no_option。

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

如果要从整数年构造日期时间对象,可以通过使用 pandas 预处理数据来创建 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')
)

最新更新