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
相关产品推荐
相关产品推荐

