如何修复 Altair 图表中的 timeUnit 错误
How to fix timeUnit error in Altair chart
我正在尝试在 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. If I remove the timeUnit option, it does not help much: 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')
)
我正在尝试在 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. If I remove the timeUnit option, it does not help much: 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')
)