在 Altair 图中更改单一颜色

Change single color in Altair plot

有没有办法在 Altair 图中仅更改单个组的颜色,同时保持其余部分不变?我喜欢默认的配色方案,但有一组我想更改颜色。

例如,在这样的散点图中:

import altair as alt
from vega_datasets import data

iris = data.iris()

alt.Chart(iris).mark_point().encode(
    x='petalWidth',
    y='petalLength',
    color=alt.Color('species')
)

我想把'versicolor'的颜色改成黑色,其余的不改。

我从文档中了解到,您可以指定自己的配色方案,或者为每个组分配颜色,如下所示:

domain = ['setosa', 'versicolor', 'virginica']
range_ = ['red', 'green', 'blue']

alt.Chart(iris).mark_point().encode(
    x='petalWidth',
    y='petalLength',
    color=alt.Color('species', scale=alt.Scale(domain=domain, range=range_))
)

但我找不到一种简单的方法来改变单个物种的颜色而不影响其余颜色。

一种方法是使用 alt.condition,尽管更新后的颜色不会出现在图例中:

import altair as alt
from vega_datasets import data

iris = data.iris()

alt.Chart(iris).mark_point().encode(
    x='petalWidth',
    y='petalLength',
    color=alt.condition("datum.species == 'setosa'", alt.value('yellow'), alt.Color('species'))
)

如果您想更改颜色 将其反映在图例中,唯一的方法是像您在问题中所做的那样使用自定义比例。