使用 Altair 的区间选择作为多视图图表中的过滤器
Using Altair's interval selection as a filter in a multi-view chart
在我的串联图表中,我使用间隔选择作为过滤器(参见下面的 GIF、Python 代码和 VL 规范)。
即使我的选择看起来是空的,我过滤的图表仍然显示了一些数据。我想要实现的是根据间隔选择中选择的日期范围显示每个站点的平均温度。
有谁能看一看并向我推荐正确的方向吗?
这是 VL 编辑器中的a reproducible example
这是我正在使用的 Python 代码:
def make_chart(df, station):
brush = alt.selection(
type="interval",
encodings=["x"],
on="[mousedown[event.altKey], mouseup] > mousemove",
translate="[mousedown[event.altKey], mouseup] > mousemove!",
zoom="wheel![event.altKey]",
)
interaction = alt.selection(
type="interval",
bind="scales",
on="[mousedown[event.shiftKey], mouseup] > mousemove",
translate="[mousedown[event.shiftKey], mouseup] > mousemove!",
zoom="wheel![event.shiftKey]",
)
points = alt.Chart().mark_circle().encode(
alt.X('yearmonthdate(date):T', title='Date'),
alt.Y('temp:Q', title='Mean Temperature in 2020 (F)'),
size=alt.Size('wind:Q', scale=alt.Scale(domain=[1, 20], range=[1,500])),
color=alt.Color('temp:Q', scale=alt.Scale(scheme='blueorange', domainMid=32),
legend=alt.Legend(title='Mean Temperature')),
tooltip=['date', 'name', 'temp', 'wind']
).properties(
width=550,
height=300
).transform_filter(
alt.datum.name == station
).add_selection(
brush
).add_selection(interaction)
bars = alt.Chart().mark_bar().encode(
x=alt.X('mean(temp)', title='Mean Temperature (F)'),
y=alt.Y('name:N', title='Station', axis=alt.Axis(labelLimit=90), sort='-x'),
color=alt.Color('mean(temp):Q', scale=alt.Scale(scheme='blueorange', domainMid=32))
).transform_filter(
brush
).properties(
width=550,
)
chart=alt.vconcat(points, bars, data=df, title=f"Mean Temperature Dashboard for NY"
)
return chart
你的图表对我来说似乎工作正常。我唯一注意到的是有些圆圈没有显示,这会让你在刷牙时看起来好像那里没有数据。如果您将域设置为从零开始,那么这些看起来都很好并且一切都按预期工作。
在我的串联图表中,我使用间隔选择作为过滤器(参见下面的 GIF、Python 代码和 VL 规范)。
即使我的选择看起来是空的,我过滤的图表仍然显示了一些数据。我想要实现的是根据间隔选择中选择的日期范围显示每个站点的平均温度。
有谁能看一看并向我推荐正确的方向吗?
这是 VL 编辑器中的a reproducible example
这是我正在使用的 Python 代码:
def make_chart(df, station):
brush = alt.selection(
type="interval",
encodings=["x"],
on="[mousedown[event.altKey], mouseup] > mousemove",
translate="[mousedown[event.altKey], mouseup] > mousemove!",
zoom="wheel![event.altKey]",
)
interaction = alt.selection(
type="interval",
bind="scales",
on="[mousedown[event.shiftKey], mouseup] > mousemove",
translate="[mousedown[event.shiftKey], mouseup] > mousemove!",
zoom="wheel![event.shiftKey]",
)
points = alt.Chart().mark_circle().encode(
alt.X('yearmonthdate(date):T', title='Date'),
alt.Y('temp:Q', title='Mean Temperature in 2020 (F)'),
size=alt.Size('wind:Q', scale=alt.Scale(domain=[1, 20], range=[1,500])),
color=alt.Color('temp:Q', scale=alt.Scale(scheme='blueorange', domainMid=32),
legend=alt.Legend(title='Mean Temperature')),
tooltip=['date', 'name', 'temp', 'wind']
).properties(
width=550,
height=300
).transform_filter(
alt.datum.name == station
).add_selection(
brush
).add_selection(interaction)
bars = alt.Chart().mark_bar().encode(
x=alt.X('mean(temp)', title='Mean Temperature (F)'),
y=alt.Y('name:N', title='Station', axis=alt.Axis(labelLimit=90), sort='-x'),
color=alt.Color('mean(temp):Q', scale=alt.Scale(scheme='blueorange', domainMid=32))
).transform_filter(
brush
).properties(
width=550,
)
chart=alt.vconcat(points, bars, data=df, title=f"Mean Temperature Dashboard for NY"
)
return chart
你的图表对我来说似乎工作正常。我唯一注意到的是有些圆圈没有显示,这会让你在刷牙时看起来好像那里没有数据。如果您将域设置为从零开始,那么这些看起来都很好并且一切都按预期工作。