Python:Altair条件颜色透明度

6
在Altair中,我想为次要条件颜色指定不透明度。由于我的散点数据相当密集,所以我希望未选择的点消失(或多或少)。
使用这里的示例,我想得到以下代码:
selection = alt.selection_multi(fields=['Origin'])
color = alt.condition(selection,
                   alt.Color('Origin:N', legend=None),
                   alt.value('lightgray') # WANT THIS TO BE %50 OPACITY
)

scatter = alt.Chart(cars).mark_point().encode(
 x='Horsepower:Q',
 y='Miles_per_Gallon:Q',
 color=color,
 tooltip='Name:N'
)

legend = alt.Chart(cars).mark_point().encode(
 y=alt.Y('Origin:N', axis=alt.Axis(orient='right')),
 color=color
).add_selection(
 selection
)

scatter | legend

要让颜色条件变成如下所示:

color = alt.condition(selection,
                   alt.Color('Origin:N', legend=None),
                   alt.Color(value='lightgray', opacity=0.5)
)

然而,我似乎无法解决这个问题,在网上也没有找到任何解决方案。

谢谢!

1个回答

11

不透明度是一个单独的通道,因此您可以对颜色和不透明度都设置条件:

color = alt.condition(selection,
                      alt.Color('Origin:N', legend=None),
                      alt.value('lightgray'))
opacity = alt.condition(selection, alt.value(1.0), alt.value(0.5))

scatter = alt.Chart(cars).mark_point().encode(
 x='Horsepower:Q',
 y='Miles_per_Gallon:Q',
 color=color,
 opacity=opacity,
 tooltip='Name:N'
)

作为上面问题的跟进,使用示例,我一直无法确定如何将图例标签(“Origins”)放置在图例顶部。有什么建议吗? - MVigoda
你应该使用交互式图例,而不是假装成图例的图表 :) https://altair-viz.github.io/gallery/interactive_legend.html - jakevdp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接