У меня есть график боке, который начинается с 7 рядов в графике. Выбранный виджет изменяет данные и показывает только 4 серии через обратный вызов customjs
for i in range(7):
if i < 4:
js_code += """data['y%d']=data.%s;""" % (i,newseriesnames[i])
js_code += """line%d.visible = %s;""" % (i,'true' if i < 4 else 'false')
js_code += 'source.change.emit();'
callback = CustomJS(args = args,code=js_code)
select.js_on_change('value',callback)
, где line0
- line6
- линии на графике, связанные с объектами данных, data['y0']
- data['y6']
, а select
- виджет селектора боке.
Это прекрасно работает на самой диаграмме боке, но не обновляет легенду. Легенда всегда та же, что и при первом отображении. Он сохраняет 7 элементов. Даже когда они скрыты на графике.
Вещи, которые я пытался обновить легенду:
- Настройка
legend.items[4].renderers[0].visible=false
- Настройка
legend.items[4].visible=false
- Вызов
legend.change.emit()
, legend.items[4].change.emit()
и legend.items[4].renderers[0].change.emit()
- Перезапись легенды другой легендой, созданной с использованием питона боке
Legend()
метод
Обратите внимание, что я не получаю никаких ошибок при этих вызовах, они просто не дают никакой разницы в легенде. Добавление нескольких легенд и скрытие / отображение их работает, за исключением того, что их размещение неправильно при использовании plot.add_layout()
Я бы предпочел не делать это с помощью интерактивного сервера, а скорее использовал бы клиентскую сторону для переключения. Мой вариант использования часто повторяется и может потребовать автономной работы.
Кто-нибудь может указать мне правильное направление? Я протестировал это в боке 0.12.16 и 0.13.0 в питоне 3.6.5.
Спасибо