黄土传说剧情线

Legends of LOESS plotted line

以下示例数据集用于说明有关格式设置的问题

import altair as alt
from vega_datasets import data

source = data.cars()

x = alt.Chart(source).mark_circle(size=60).encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin',
    )

x + x.transform_loess('Horsepower', 'Miles_per_Gallon').mark_line()

  1. 如何更改右侧颜色图例中“未定义”LOESS绘制线的名称;

  2. 有没有办法只删除 LOESS 标绘线的图例,同时保留“欧洲、日本和美国”;

我似乎无法为 mark_line() 找到合适的“标记 属性”标志,我无法通过 legend=None

PS:由于这张图表需要与Alt.vconcat/hconcat结合,我认为它需要发生在基本水平;

首先要知道图例来自编码:如果您不希望某个字段出现在颜色图例中,请不要为其指定颜色编码。如果您确实希望它出现,请给它一个颜色编码,以反映您想要在图例中显示的内容

当您编写类似 x.transform_loess(...) 的内容时,生成的图表会继承 x 中定义的所有编码。 LOESS 转换生成一个新的数据集,它只包含目标变量,因此 color='Origin' 编码指向一个未定义的列。

如果您希望未定义的列不出现在图例中,请避免对转换后的图表进行颜色编码:

x = alt.Chart(source).mark_circle(size=60).encode(
    x='Horsepower',
    y='Miles_per_Gallon',
)

x.encode(color='Origin') + x.transform_loess('Horsepower', 'Miles_per_Gallon').mark_line()

另一方面,如果您希望图例表达其他内容,您将需要一个用于颜色编码的列,您可以使用计算转换创建该列:

x = alt.Chart(source).mark_circle(size=60).encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color='Origin'
)

x + x.transform_loess(
        'Horsepower', 'Miles_per_Gallon'
    ).transform_calculate(
        Origin='" LOESS"'
    ).mark_line()