X轴上奇怪的年份值

时间:2019-03-09 22:08:42

标签: python vega-lite altair

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

在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'
)

enter image description here

(vega editor link)

2 个答案:

答案 0 :(得分:4)

加到@kanitw的答案:当您将整数转换为日期时间时,该整数被视为自零日期以来的纳秒。您可以通过执行以下操作在熊猫中看到它:

score_df <- score_df %>% 
group_by(country) %>% 
arrange(year) %>% 
filter(!is.na(score)) %>% 
slice(1) %>% 
mutate(yr_1_score = score) %>% 
ungroup() 

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

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

>>> 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]

example chart

首先,我们通过将适当的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' ) 参数传递给loading函数来将year列解析为日期,然后使用pandas.read_csv timeUnit从整个日期时间中仅提取年份

如果您是从CSV URL而不是从pandas数据框中绘制数据,则Vega-Lite足够聪明,可以根据您在图表中指定的编码来解析CSV文件,这意味着以下结果相同:< / p>

year

example chart

答案 1 :(得分:3)

年份整数不是标准时间值。

在Vega-Lite中,您可以将"format": {"parse": {"Year": "date: '%Y'"}}添加到数据块中,以为字段"year"指定自定义日期解析格式。

See a working spec

在Altair中,您可以类似地指定* Data类的format属性(例如NamedData)。