Я только что наткнулся на this problem myself in a similar scenario. В моем случае я также хотел сделать другие операции над этим.
Есть 2 возможных подходов:
1.) клиент-сервер подход
2.) Клиент только приблизиться к
1.) клиент-сервер подход ак Bokeh Сервер
Одним из способов достижения этой интерактивности является использование сервера bokeh, который вы можете больше узнать о here. Я опишу этот путь более подробно, так как на данный момент я немного более знаком с ним.
Идя ваш пример выше, если бы я использовал боке служить, я бы первым настроить ColumnDataSource так:
source = ColumnDataSource(data = dict(
time = Time,
temp0 = [],
temp1 = [],
temp2 = [],
temp3 = [],
)
Далее я бы setup a widget, что позволяет переключать, что температура, чтобы показать:
multi_select = MultiSelect(title="Option:", value=["Temp1"],
options=["Temp1", "Temp2", "Temp3"])
# Add an event listener on the python side.
multi_select.on_change('value', lambda attr, old, new: update())
Тогда я бы определил функцию обновления, как показано ниже. Целью функции обновления является обновление ColumnDataSource (который был ранее пустым) со значениями, которые вы хотите заполнить на графике.
def update():
"""This function will syncronize the server data object with
your browser data object. """
# Here I retrieve the value of selected elements from multi-select
selection_options = multi_select.options
selections = multi_select.value
for option in selection_options:
if option not in selections:
source.data[option] = []
else:
# I am assuming your temperatures are in a dataframe.
source.data[option] = df[option]
Последнее, что нужно сделать, это переопределить, как вы строите свои глифы. Вместо того чтобы рисовать из списков или dataframes, мы черпаем наши данные из ColumnDataSource так:
p1.line("time","temp0", source=source, size=12,color=getcolor())
p1.line("time","temp1", source=source, size=12,color=getcolor())
p1.line("time","temp2", source=source, size=12,color=getcolor())
p1.line(Time,Temp3, source=source, size=12,color=getcolor())
Так в основном, контролируя содержание ColumnDataSource, который синхронизируется с объектом браузера, я могу переключить ли точки данных показаны или нет. Вам может понадобиться или не обязательно указывать несколько источников ColumnDataSources. Попробуйте это первым.
2.) Клиент только приблизиться к Ak обратных вызовов
подход выше использует архитектуру клиент-сервер. Другим возможным подходом было бы сделать это все в интерфейсе. This link показывает, как некоторые простые взаимодействия могут быть выполнены полностью на стороне браузера с помощью различных форм обратных вызовов.
В любом случае, я надеюсь, что это будет полезно. Ура!