最近,我开始使用 Altair,并且非常喜欢它。然而,我偶然发现了一些我无法使用文档弄清楚的东西:
我有一个散点图,将一些连续数据编码为颜色。有没有办法通过颜色栏选择这些值的范围?类似于如何在可点击图例中选择离散特征。
我尝试了以下代码:
cars = data.cars()
colorbar_brush = alt.selection_interval(fields=["Acceleration"], bind="legend")
chart = alt.Chart(cars).mark_circle().encode(
x="Horsepower",
y="Miles_per_Gallon",
color=alt.condition(colorbar_brush, "Acceleration:Q", alt.value("lightgray")),
).add_params(
colorbar_brush,
)
我也尝试过
colorbar_brush = alt.selection_interval(encodings=["color"], bind="legend")
两者都不起作用。
或者,可以使用单独的图表作为可点击的图例。但我怎样才能创建颜色渐变图表呢?
正如 @joelostblom 在他的评论中提到的,您可以使用第二个图来生成具有选择间隔的色标。我已经使用 mark_tick 实现了这一点,并取得了良好的效果。
比例图表 y 编码的大多数选项仅用于美观,可以根据需要删除/调整。
cars = data.cars()
color_encoding = alt.Color("Acceleration:Q", legend=None)
selection = alt.selection_interval(encodings=["y"])
chart = (
alt.Chart(cars)
.mark_circle()
.encode(
x="Horsepower",
y="Miles_per_Gallon",
color=alt.condition(selection, color_encoding, alt.ColorValue("lightgray")),
)
)
legend_chart = (
alt.Chart(
alt.sequence(
min(cars.Acceleration), max(cars.Acceleration), 0.01, as_="Acceleration"
)
)
.mark_tick(orient="horizontal")
.encode(
y=alt.Y(
"Acceleration:Q",
axis=alt.Axis(
orient="right",
ticks=False,
grid=False,
titleAngle=0,
titleAnchor="end",
titleAlign="center",
titleBaseline="bottom",
titleY=-10,
tickCount=3
),
).scale(zero=False, padding=0),
color=color_encoding,
)
).add_params(selection)
chart | legend_chart