Altair实现vega-lite交互示例时transform_filter报错如何解决?
报错原因
你定义的公共基础图表base已经通过add_selection方法绑定了区间选择器,后续的bar图层和rule图层都继承了这个基础图表,相当于同一个选择器被重复添加到了两个图层中。Vega编译时会为每个绑定了选择器的图层生成对应的控制信号,最终出现信号名重复的冲突。
你参考的Vega-Lite示例中,选择器仅绑定在第一个bar图层上,rule图层仅使用选择器做过滤,并没有重复绑定选择器,这是复现出现异常的核心原因。
解决方案
仅给需要触发交互选择的bar图层绑定选择器,rule图层只引用该选择器做过滤即可,不需要重复绑定。
修改后的可运行代码如下:
import altair as alt from vega_datasets import data df = data.seattle_weather() selection = alt.selection_interval(encodings=['x']) # 基础图表不绑定选择器 base = alt.Chart(df) bar_i = base.mark_bar().add_selection(selection).encode( x="month(date):O", # 对齐原示例的ordinal类型,也可保留:T不影响核心功能 y="mean(precipitation):Q", opacity=alt.condition(selection, alt.value(1.0), alt.value(0.7)) ) rule_i = base.mark_rule(color='firebrick', size=3).transform_filter(selection).encode( y="mean(precipitation):Q" ) (bar_i + rule_i).properties(width=600)
内容的提问来源于stack exchange,提问作者dkapitan
相关产品推荐
相关产品推荐

