Альтаир строит несколько линий с модальным селектором и предыдущими точками данных - PullRequest
0 голосов
/ 31 марта 2020

Визуализация newb ie здесь!

Я запрограммировал некоторые модели временных рядов, которые выводят из определенного набора данных прогресс трех связанных метрик.

Конкретно, каждая модель построена из другой набор данных и прогнозирует три траектории, для каждой из метрик.

Я хочу построить все прогнозы моделей и обучающий набор на графике так, чтобы:

  • Я могу выбрать метрику c отображается на графике через выпадающее меню
  • При наведении курсора на траекторию будут выделены точки данных, из которых была построена модель
  • Для каждого показателя c выделены некоторые пороговые значения при некоторых указанных c значениях осей y

Как мне это сделать в altair?

Пока мой код выглядит так:

for metric in metrics:
    for label, df in predictions[metric].items():
      alt.Chart(predictions[metric]).mark_line().encode(
          x="Year",
          y=label
      )

Где predictions - это словарь, содержащий один DataFrame для каждого показателя c со столбцами для прогнозов каждой модели. Но это буквально ничего не излагает.

Мои вопросы:

  • Как мне нарисовать то, что я хочу, используя altair?
  • Любые советы о том, как хранить данные временного ряда, чтобы упростить манипулирование с Altair, а не просто сложность DataFrames?

///////////////////// ////////////////////////////////////

РЕДАКТИРОВАТЬ

После немного поиграюсь и прочитав это Мне удалось сделать выпадение

alt.data_transformers.disable_max_rows()
select_box = alt.binding_select(options=list(predictions_df['variable'].unique()))
selection = alt.selection_single(name='y_axis', fields=['variable'], bind=select_box)
alt.Chart(predictions_df, width=800, height=600
).transform_filter(
    alt.FieldGTPredicate(field='value', gt=0.)
).mark_line().encode(
      x="Year",
      y = alt.Y('value', scale=alt.Scale(type='log'), title='TODO'),
      color="Model",
  ).add_selection(
    selection
).transform_filter(
    selection
)

Хотелось бы, чтобы название оси изменилось с выделением - и все еще не выяснилось остальные

...