altair.when#

altair.when(predicate=Undefined, *more_predicates, empty=Undefined, **constraints)#

开始一个 when-then-otherwise 条件。

生成的谓词是 predicate 以及可选的 *, ** 参数的 & 缩减。

参数:
predicate

一个选择或测试谓词。str 输入将被视为测试操作数。

注意

接受与 condition() 中相同范围的输入。

*more_predicates

附加谓词,仅限于支持 & 的类型。

empty

对于选择参数,空选择的谓词默认返回 True。可以通过设置 empty=False 来覆盖此行为。

注意

predicate 是一个被多次使用的 Parameter 时,alt.when(..., empty=...) 为每次出现提供精细控制。

**constraints

指定 字段相等谓词(Field Equal Predicate)。这是 alt.datum.field_name == value 的快捷方式,请参阅示例了解用法。

返回:
When

一个部分状态,需要调用 When.then() 来完成条件。

注意事项

  • 直接受到 polars.when 中使用的 when-then-otherwise 语法启发。

示例

设置一个常见图表

import altair as alt
from vega_datasets import data

source = data.cars()
brush = alt.selection_interval()
points = (
    alt.Chart(source)
    .mark_point()
    .encode(x="Horsepower", y="Miles_per_Gallon")
    .add_params(brush)
)
points

基本的 if-then-else 条件直接转换为 when-then-otherwise

points.encode(color=alt.when(brush).then("Origin").otherwise(alt.value("lightgray")))

省略 .otherwise() 子句将使用通道默认值

points.encode(color=alt.when(brush).then("Origin"))

作为位置参数传递的谓词将通过 & 进行缩减

points.encode(
    color=alt.when(
        brush, (alt.datum.Miles_per_Gallon >= 30) | (alt.datum.Horsepower >= 130)
    )
    .then("Origin")
    .otherwise(alt.value("lightgray"))
)

使用关键字参数 constraints 可以简化诸如以下的组合

verbose_composition = (
    (alt.datum.Name == "Name_1")
    & (alt.datum.Color == "Green")
    & (alt.datum.Age == 25)
    & (alt.datum.StartDate == "2000-10-01")
)
when_verbose = alt.when(verbose_composition)
when_concise = alt.when(Name="Name_1", Color="Green", Age=25, StartDate="2000-10-01")