【问题标题】:Altair add selection to Layered chartAltair 将选择添加到分层图表
【发布时间】:2020-07-23 09:01:00
【问题描述】:

我有下面的代码。但是“选择”并没有按预期工作。当一个点被选中时,其他线被取消选中。但所选线的点也会隐藏/消失。

我一定是做错了什么。这是向分层图表添加选择的正确方法吗?

import altair as alt
from vega_datasets import data

source = data.stocks()

selection1 = alt.selection_single()

line = alt.Chart(source).mark_line().encode(
    x='date',
    y='price',
    #color= 'symbol',
    color=alt.condition(selection1, 'symbol', alt.value('grey')),
    opacity=alt.condition(selection1, alt.value(0.8), alt.value(0.1)),
)

point = line.mark_point(size = 40, fill='white')

alt.layer(line, point).add_selection(selection1)

【问题讨论】:

    标签: python altair


    【解决方案1】:

    默认情况下,选择只选择与您单击的标记直接关联的数据。如果您希望它应用于更大的数据集,您可以指定fieldsencodings。在您的情况下,听起来您希望它适用于具有相同 symbol 的所有数据,因此您可以这样做:

    selection1 = alt.selection_single(fields=['symbol'])
    

    或者,由于您的符号在所有情况下都映射到颜色,因此您可以这样做:

    selection1 = alt.selection_single(encodings=['color'])
    

    【讨论】:

    • 部分有效。当您单击时,只有alt.layer(line, point)line 似乎会触发选择(不是重点)。如果我在上面的公式中切换linepoint,行为就会逆转。有没有办法让它们都可以选择? point 需要是我用例中的上层,因为我希望它们填充白色以隐藏点后面的线。
    • 是的,您一次只能在一个图层上触发选择。要获得您所追求的行为,您可以使用两个选择,或者使用带有mark_line(point=True) 的单个图层。我不会更新我的答案,因为我相信它会按照书面形式回答您的原始问题。
    • 谢谢杰克,我试试看
    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 2021-09-03
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多