You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Altair无选中状态下标记透明度自定义设置问题

解决Altair选择状态下的透明度设置问题

你需要调整opacity的条件编码,区分无选中和有选中但未被选中两种状态,具体修改如下:

修改后的代码

single = alt.selection_point(on='click', fields=['account_name'], empty=True)

gaussian_jitter = (
    alt.Chart(df_melt, title="Primary Customer Characteristics")
    .mark_point(size=50, filled=True)
    .encode(
        y=alt.Y("customer_characteristic:N", title="Customer Characteristics"),
        x=alt.X("z_scores:Q", title="Z Scores"),
        yOffset="jitter:Q",
        color=alt.condition(single, 'customer_characteristic', alt.value('lightgray')),
        # 核心修改:嵌套条件区分空选择和非空选择的未选中状态
        opacity=alt.condition(
            single.empty,  # 无任何选中时,所有点透明度0.6
            alt.value(0.6),
            alt.condition(single, alt.value(1), alt.value(0.2))  # 有选中时,选中点1,未选中点0.2
        ),
        size=alt.condition(single, alt.value(50), alt.value(10)),
        # tooltip=alt.Tooltip(id_vars, bandPosition=0.5),
    )
    .transform_calculate(
        # Generate Gaussian jitter with a Box-Muller transform
        jitter="sqrt(-2*log(random()))*cos(2*PI*random())"
    )
).add_params(single)

原理说明

  • 原代码中,opacity=alt.condition(single, alt.value(1), alt.value(.1))会在无选中时触发else分支(返回0.1),直接覆盖了mark_point里的0.6设置。
  • 通过嵌套single.empty的判断,先处理无选中的情况(返回0.6),再处理有选中时的两种状态:选中点透明度1,未选中点0.2。
  • single.empty是Altair选择对象的属性,用于判断当前是否处于无任何选中的状态。

内容的提问来源于stack exchange,提问作者campo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:05:15