Я хочу опубликовать ответ на на этот вопрос , где ОП хотел переключаться между масштабами журнала и линейной оси, возможно, с помощью виджетов. Принятый (и единственный) ответ предполагает использование вкладок. Поскольку это удваивает количество графиков, я попытался сделать что-то другое: обновить атрибут 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)
. Почему это так, и как я могу обновить весы, не создавая новый график?