条件可以同时基于选择和谓词吗?
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')
)
选择为空时生成的图表如下所示:
是否可以在条件中组合选择和谓词?我只想在选择了组且高于某个值的情况下为散点图上的点着色。
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')
)
选择为空时生成的图表如下所示: