Интерактивный линейный сюжет Altair, выделение линии и выделение при нажатии на значок справа - PullRequest
2 голосов
/ 22 апреля 2019

Я пытался сделать какой-нибудь интерактивный сюжет, используя Альтаир в лаборатории Юпитера.

Я достиг этой стадии, когда результаты ниже. enter image description here

Как видите, линия не выдвигается вперед, когда она выделена. Как мне сделать так, чтобы он выскочил на фронт?

Прикрепленный код.

import altair as alt
source = df
selection = alt.selection_multi(fields=['class'], on='click')    
color = alt.condition(selection,
                      alt.Color('class:O', legend=None,
                      scale=alt.Scale(scheme='category10')),
                      alt.value('lightgray'))

base = alt.Chart(source).mark_line(point=True, size=10).encode(
    x='x',
    y='y',
    color=color
).properties(
    width=800,
    height=900
).interactive()

legend = alt.Chart(source).mark_point(filled=True, size=200).encode(
    y=alt.Y('class:O'),
    color=color
).add_selection(
selection
)

base | legend

1 Ответ

2 голосов
/ 22 апреля 2019

Нет способа изменить z-порядок строки в зависимости от выбора.Но для создания подобного эффекта вы можете использовать один трюк - использовать статический фон, на котором отображаются все данные, а также передний план, отфильтрованный при выделении.

Например:

background = alt.Chart(source).mark_line(point=True, size=10).encode(
    x='x',
    y='y',
    color=alt.value('lightgray')
).properties(
    width=800,
    height=900
)

foreground = background.encode(
    color=alt.Color('class:O', legend=None,
                    scale=alt.Scale(scheme='category10'))
).transform_filter(
    selection
)


legend = alt.Chart(source).mark_point(filled=True, size=200).encode(
    y=alt.Y('class:O'),
    color=color
).add_selection(
    selection
)

(background + foreground) | legend
...