Если исходить из ответа @ Philipp_Kats и комментария @ dominik (и для всех, кто наткнулся на эту ветку и хочет посмотреть пример кода Altair), текущий способ достижения эффекта «всплывающей подсказки» вдоль строк:
- Создать строку (
mark_line()
)
- Создать выбор, который выбирает ближайшую точку и выбирает на основе значения x
- Зафиксируйте несколько прозрачных селекторов по линии, сообщая значение x в разных позициях линии
- Слой (
mark_text()
) поверх 1 - 3 над
Реальный пример - это линейный график в простом приложении Flask, которое я сделал . Разница лишь в том, что я не делал селекторы прозрачными (opacity=alt.value(0)
), но в остальном это линейный график с привязанными подсказками.
Вот воспроизводимый пример с использованием исходного набора данных OP:
# Step 1: create the line
line = alt.Chart().mark_line(interpolate="basis").encode(
x=alt.X("year:O"),
y=alt.Y("perc:Q", axis=alt.Axis(format='%')),
color='sex:N'
).transform_filter(
alt.datum.job == 'Welder'
)
# Step 2: Selection that chooses nearest point based on value on x-axis
nearest = alt.selection(type='single', nearest=True, on='mouseover',
fields=['year'])
# Step 3: Transparent selectors across the chart. This is what tells us
# the x-value of the cursor
selectors = alt.Chart().mark_point().encode(
x="year:O",
opacity=alt.value(0),
).add_selection(
nearest
)
# Step 4: Add text, show values in Sex column when it's the nearest point to
# mouseover, else show blank
text = line.mark_text(align='left', dx=3, dy=-3).encode(
text=alt.condition(nearest, 'sex:N', alt.value(' '))
)
# Layer them all together
chart = alt.layer(line, selectors, text, data=source, width=300)
chart
Итоговый участок: