Как обновить весы, не генерируя новый сюжет боке? - PullRequest
0 голосов
/ 03 марта 2020

Я хочу опубликовать ответ на на этот вопрос , где ОП хотел переключаться между масштабами журнала и линейной оси, возможно, с помощью виджетов. Принятый (и единственный) ответ предполагает использование вкладок. Поскольку это удваивает количество графиков, я попытался сделать что-то другое: обновить атрибут x_scale экземпляра figure напрямую

from bokeh.plotting import figure, show

fig = figure(x_axis_type='linear', y_axis_type='linear', title = 'test')
fig.scatter(x=[1,10,100,1000], y=[1,10,100,1000])

#t = show(fig, notebook_handle=True) # what I would do normally

def new_graph(x_scale, y_scale):
    scales = {'linear': figure(x_axis_type='linear', y_axis_type='linear'),
              'log': figure(x_axis_type='log', y_axis_type='log')}

    fig.x_scale = scales[x_scale].x_scale
    fig.y_scale = scales[y_scale].y_scale
    fig.title.text = 'updated graph'

    #push_notebook(t) # does not work
    show(fig)

widgets.interact(new_graph, x_scale = ['linear', 'log'], y_scale = ['linear', 'log'])

Обычно я бы использовал t = show(fig, notebook_handle=True) и в своей функции обновления push_notebook(t). Но здесь работает только обновление заголовка, но не обновление оси. Чтобы получить фигуру с новыми осями, мне нужно использовать show(fig). Почему это так, и как я могу обновить весы, не создавая новый график?

...