如果我使用vega数据集“灾难”并制作一个简单的图表,我会得到一些怪异的年份值。
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'
)
答案 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]
首先,我们通过将适当的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
答案 1 :(得分:3)
年份整数不是标准时间值。
在Vega-Lite中,您可以将"format": {"parse": {"Year": "date: '%Y'"}}
添加到数据块中,以为字段"year"
指定自定义日期解析格式。
在Altair中,您可以类似地指定* Data类的format
属性(例如NamedData
)。