如何在 Altair 图的颜色栏中进行选择?

问题描述 投票:0回答:1

最近,我开始使用 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")

两者都不起作用。

或者,可以使用单独的图表作为可点击的图例。但我怎样才能创建颜色渐变图表呢?

python plot altair
1个回答
0
投票

正如 @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

Chart of Answer

© www.soinside.com 2019 - 2024. All rights reserved.