X 轴上的奇怪年份值

cam*_*mpo 4 python vega-lite altair

如果我使用 vega 数据集“disasters”并制作一个简单的图表,我会得到一些奇怪的年份值。

在 Altair 中,代码是:

import altair as alt
from vega_datasets import data

dis=data.disasters()

alt.Chart(dis).mark_bar().encode(
    x=alt.X('Year:T'),
    y=alt.Y('Deaths'),
    color='Entity'
)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

(织女星编辑器链接)

jak*_*vdp 6

添加到@kanitw 的答案:当您将整数转换为日期时间时,该整数被视为自零日期以来的纳秒。您可以通过执行以下命令在 Pandas 中看到这一点:

>>> pd.to_datetime(dis.Year)
0   1970-01-01 00:00:00.000001900
1   1970-01-01 00:00:00.000001901
2   1970-01-01 00:00:00.000001902
3   1970-01-01 00:00:00.000001903
4   1970-01-01 00:00:00.000001905
Name: Year, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

Altair/Vega-Lite 使用类似的约定。

如果您想在加载数据时将年份解析为日期,然后使用 Altair 绘制年份,您可以执行以下操作:

import altair as alt
from vega_datasets import data

dis=data.disasters(parse_dates=['Year'])

alt.Chart(dis).mark_bar().encode(
    x=alt.X('year(Year):T'),
    y=alt.Y('Deaths'),
    color='Entity'
)
Run Code Online (Sandbox Code Playgroud)

示例图表

首先,我们通过将适当的pandas.read_csv参数传递给加载函数来将年份列解析为日期,然后使用year timeUnit从完整的日期时间中提取年份。

如果您从 CSV URL 而不是 Pandas 数据帧绘制数据,Vega-Lite 足够智能,可以根据您在图表中指定的编码解析 CSV 文件,这意味着以下将给出相同的结果:

dis=data.disasters.url

alt.Chart(dis).mark_bar().encode(
    x=alt.X('year(Year):T'),
    y=alt.Y('Deaths:Q'),
    color='Entity:N'
)
Run Code Online (Sandbox Code Playgroud)

示例图表