条件可以同时基于选择和谓词吗?

Can a condition be based on both a selection and a predicate?

是否可以在条件中组合选择和谓词?我只想在选择了组且高于某个值的情况下为散点图上的点着色。

import altair as alt
from vega_datasets import data

source = data.cars()

selection = alt.selection_multi(fields=['Origin'])
color = alt.condition(
    selection & (alt.datum.Miles_per_Gallon > 18),
    alt.Color('Origin:N'),
    alt.value('lightgray')
)

alt.Chart(source).mark_circle().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color=color,
    tooltip=['Name', 'Origin', 'Horsepower', 'Miles_per_Gallon']
).add_selection(
    selection
)

尝试复合选择和谓词引发:

Javascript Error: Cannot find a selection named "(datum.Miles_per_Gallon > 18)".

该代码仅适用于选择或条件,但不能同时适用于两者。我能想到的唯一解决方案是在顶部分层散点图,所有数据点都低于阈值,颜色为灰色。感谢任何帮助,谢谢!

看起来 & 运算符在选择和表达式之间无法正常工作(由 Altair 存储库中的 this issue 跟踪)。您可以通过使用底层架构对象来解决此问题:

color = alt.condition(
    alt.LogicalAndPredicate(**{'and': [selection, '(datum.Miles_per_Gallon > 18)']}),
    alt.Color('Origin:N'),
    alt.value('lightgray')
)

选择为空时生成的图表如下所示: