更改 Altair 图例中的形状颜色

Posted

技术标签:

【中文标题】更改 Altair 图例中的形状颜色【英文标题】:Change shape color in an Altair legend 【发布时间】:2020-11-24 13:12:42 【问题描述】:

考虑以下改编自 Altair website 的代码。

import altair as alt
import pandas as pd

source = pd.DataFrame(
    'a': ['A', 'B', 'B', 'B', 'E', 'F', 'G', 'H', 'I'],
    'b': [28, 55, 43, 91, 81, 53, 19, 87, 52]
)
brush = alt.selection(type='single')

alt.Chart(source).mark_point(filled=True).encode(
    x='a',
    y='b:Q',
    shape='a',
    color=alt.condition(brush, 
                        alt.Color('b:N', legend=alt.Legend(columns=2, symbolFillColor='blue')),
                        alt.value(None)),
).add_selection(brush)

哪个输出这个图:

当我单击一个数据点时,所有其他数据点都会消失,这没关系。

问题出在传说中的形状没有颜色,因为alt.value(None))

如何在保持选择的同时为图例中的形状设置不可见的颜色(当我单击一个数据点使所有其他形状消失时)?

我试过symbolFillColor='blue'symbolStrokeColor='blue',但它并没有改变形状颜色。

谢谢你:)

【问题讨论】:

【参考方案1】:

一种方法是设置默认标记颜色:

import altair as alt
import pandas as pd

source = pd.DataFrame(
    'a': ['A', 'B', 'B', 'B', 'E', 'F', 'G', 'H', 'I'],
    'b': [28, 55, 43, 91, 81, 53, 19, 87, 52]
)
brush = alt.selection(type='single')

alt.Chart(source).mark_point(filled=True, color='blue').encode(
    x='a',
    y='b:Q',
    shape='a',
    color=alt.condition(brush, 
                        alt.Color('b:N', legend=alt.Legend(columns=2)),
                        alt.value(None)),
).add_selection(brush)

symbolFillColorsymbolStrokeColor 不起作用的原因是因为您将它们应用于颜色图例,而这些默认颜色将被编码覆盖。

【讨论】:

以上是关于更改 Altair 图例中的形状颜色的主要内容,如果未能解决你的问题,请参考以下文章

ggplot 有两个图例,颜色图例中显示错误的形状

如何在 HTML 的图例中指定不同的形状?

难以获得混合线a和指向ggplot2中颜色和形状的点图例

添加考虑颜色、形状和线型的组合图例,同时保留原始图例

altair 删除或抑制自动生成的图例

R语言ggplot2可视化抑制(部分)图例(legend)输出实战:抑制颜色图例输出保留数据点形状图例输出