如何基于布尔条件修改Altair图表中点的size属性?
问题解决:Altair条件判断点大小报错的修复
错误原因
你使用了Python原生的in运算符判断alt.datum.name是否在列表中,这会在Python层面直接计算为布尔值(True/False),但Altair的alt.condition需要接收Vega-Lite的条件表达式对象或字符串,而非Python布尔值,因此触发NotImplementedError。
修复方案
方案一:使用Altair内置的FieldOneOfPredicate(推荐)
这是Altair为字段匹配列表场景提供的封装API,更符合Altair的使用规范:
graph = alt.Chart(df).mark_point(filled=False).encode( x=alt.X(axe_x), y=alt.Y(axe_y), size=alt.condition( alt.FieldOneOfPredicate(field='name', oneOf=some_list), alt.value(150), alt.value(50) ) )
方案二:使用Vega-Lite表达式的includes方法
直接编写Vega-Lite支持的表达式字符串,利用数组的includes方法判断成员关系:
graph = alt.Chart(df).mark_point(filled=False).encode( x=alt.X(axe_x), y=alt.Y(axe_y), size=alt.condition( f"includes({some_list}, datum.name)", alt.value(150), alt.value(50) ) )
注:如果some_list是字符串列表,Python的f-string会自动将其转换为合法的Vega-Lite数组格式(如['a','b'])。
内容的提问来源于stack exchange,提问作者grymlin
相关产品推荐
相关产品推荐

