Altair中结合empty属性组合多选择时的异常行为排查与实现方法咨询
Altair中结合empty属性组合多选择时的异常行为排查与实现方法咨询
我遇到了一个Altair交互选择的问题,想请大家帮忙看看。先附上我的最小可复现代码:
# create data df = pd.DataFrame() df['x'] = [0, 1, 2] * 3 df['y'] = [0] * 3 + [1] * 3 + [2] * 3 # create selections click_select = alt.selection_point(name='_click_select_', toggle='true', encodings=['x','y'], empty=False, clear=False) box_select = alt.selection_interval(name='_box_select_', empty=False, on="[mousedown[event.altKey], mouseup] > mousemove", translate="[mousedown[event.altKey], mouseup] > mousemove!") # initialize base = alt.Chart(df).mark_point().encode(x='x', y='y') base = base.encode(color=alt.when(click_select | box_select).then(alt.value('red')).otherwise(alt.value('blue'))) base = base.add_params(click_select, box_select)
这是一个包含9个点的散点图,我原本期望:
- 初始状态下所有点都是蓝色
- 当通过点击选中点,或者按住Alt键用框选工具选中点时,被选中的点会变成红色
但实际运行结果却和预期不符:初始状态下所有点都是红色。只有当我同时完成了两个操作——用点击选择器选过至少一个点,并且用框选工具画过至少一个选框之后,图表才会按预期工作:选中的点显示红色,其余点显示蓝色。
我直觉上觉得这和empty参数有关,看起来就算没有任何选择操作,所有点都“满足”了click_select | box_select这个逻辑判断。不过我已经给两个选择器都设置了empty=False,按道理这时候两个选择器都应该返回False,“或”运算的结果也应该是False,从而触发otherwise对应的蓝色样式。我试过修改两个选择器的empty参数,还试过在when()方法里额外添加empty参数,但都没有效果。而且更让我困惑的是,明明用的是“或”的逻辑,为什么需要两个选择器都激活之后才能正常工作呢?
想请教大家:我该怎么实现预期的交互行为?关于empty参数的作用,我到底哪里理解错了?
备注:内容来源于stack exchange,提问作者fitzme
相关产品推荐
相关产品推荐

