Altair Quick Menubar#

import polars as pl
import altair as alt

# Pandas read_csv is slightly better at reading remote
penguins = pl.from_pandas(pl.read_csv("https://pos.it/palmer-penguins-github-csv", null_values="NA").to_pandas())

# Iffy to Altair condition outside the function but... for example purposes:
click_condition = alt.selection_point(fields=["species"], value="Adelie")

def get_altair_button(df, column, width=200):
    # Make base encoding
    base = alt.Chart(df).encode(
        y=alt.Y(f"{column}:N").axis(labels=False, ticks=False, grid=False, domainWidth=0).title(None),
        x=alt.value(width),
        text=alt.Text(f"{column}:N")
    )
    buttons = base.mark_bar(cornerRadius=5, size=70).encode(
        color=alt.condition(click_condition, alt.value("darkgreen"), alt.value("#f4f4f4"))
    )
    button_labels = (
        base.mark_text(size=13, align="right", dx=-10)
        .encode(
            color=alt.condition(click_condition, alt.value("white"), alt.value("darkgreen"))
        )
    )
    return (
        (buttons + button_labels)
        .add_params(click_condition)
        .properties(view=alt.ViewConfig(strokeWidth=0))
    )
get_altair_button(penguins, column="species", width=100)
# Try wider width
species_menu = get_altair_button(penguins, column="species", width=150)
fig = alt.Chart(penguins).mark_circle(opacity=0.8).encode(
    x="bill_length_mm:Q",
    y="body_mass_g:Q",
    color=alt.Color("species:N"),
    opacity=alt.condition(click_condition, alt.value(0.8), alt.value(0.1))
).properties(width=250, height=250).add_params(click_condition)

Voila#

Click around!

(species_menu | fig).resolve_scale(color="independent")