Altair滑块变换数据

时间:2018-08-17 23:14:58

标签: python vega-lite altair

我已经享受使用Altair几周了,但是我仍然坚持如何解决问题。我一直在尝试绘制平均温度数据与月份的关系图,并使用滑块小部件过滤年份。我可以使该图起作用,但是一旦使用滑块选项,它就不会显示任何数据。我尝试仅使用选择选项,但这没有用。我只是不知道如何处理转换选项。我使用一段时间内的美国人口示例作为指南。

import altair as alt
from altair.expr import datum, if_
alt.renderers.enable('notebook')
path = 'https://raw.githubusercontent.com/SpiritR/datpr6754/master/prtas_1901_2015.csv'


slider = alt.binding_range(min=1900, max=2020, step=10)
year = alt.selection_single(name="year", fields=['Year'], bind=slider)

alt.Chart(path).mark_bar().encode(
    alt.X('Month_Name:O'),
    alt.Y('tas:Q', scale=alt.Scale(domain=(20, 28))),
).properties(
    width=900,
    height=300,
).add_selection(
    year
).transform_calculate(
   ????
).transform_filter(
    year.ref()
)

1 个答案:

答案 0 :(得分:2)

CSV数据被解析为字符串而不是数字。当您使用滑块选择日期(例如1959)时,它会过滤数据以检查哪些值等于该值...并且由于数据是字符串,因此"1959" != 1959和结果子集为空的。

您可以强制将列解析为数字,然后滑块将正常工作。例如:

import altair as alt
alt.renderers.enable('notebook')

path = 'https://raw.githubusercontent.com/SpiritR/datpr6754/master/prtas_1901_2015.csv'
data = alt.UrlData(url=path, format=alt.CsvDataFormat(parse={'Year': 'number'}))

slider = alt.binding_range(min=1901, max=2015, step=1)
year = alt.selection_single(name="year", fields=['Year'], bind=slider)

alt.Chart(data).mark_bar().encode(
    alt.X('Month_Name:O'),
    alt.Y('tas:Q', scale=alt.Scale(domain=(20, 28))),
).properties(
    width=900,
    height=300,
).add_selection(
    year
).transform_filter(
    year
)