如何使图形更改在散景中的重置按钮中幸存下来

How to make figure changes survive the Reset button in bokeh

我在散景中动态更改图形属性,发现按下工具栏中的“重置”按钮可以恢复我在代码中所做的更改。一个例子(运行 和 bokeh serve):

import bokeh.plotting
import bokeh.models
import bokeh.layouts
import numpy as np

# set up the interface
fig = bokeh.plotting.figure(x_range=(0, 10), y_range=(0, 10))
plt = fig.line(np.linspace(0, 10, 20), np.random.random(20) * 10)
button = bokeh.models.Button(label='scramble')

# add everything to the document
bokeh.plotting.curdoc().add_root(bokeh.layouts.column(button, fig))

# define a callback and connect it
def callback():
    fig.y_range.start, fig.y_range.end = [0, 20]
button.on_click(callback)

这里发生的是绘图首先显示 y 范围 (0, 10)。当我按下我的 Button 小部件时,y 范围更改为指定的 (0, 20)。但是,如果我随后按下工具栏的重置按钮,y 范围将返回到 (0, 10)。这是预期的行为吗?

如果我想更改描述潜在重置后状态的代码怎么办?这感觉像是一个自然的功能,在回调中动态提供合理的绘图状态,允许用户缩放和平移,然后使用重置按钮返回到合理的状态。

我认为这里发生的事情是您在 python 中初始化文档,然后散景 js 和 python 部分在浏览器中呈现后不会同步。但是散景服务器支持这种同步documentation

# open a session to keep our local document in sync with server
session = push_session(curdoc())

是的,这是预期的行为。内置 ResetTool 的明确目的是将情节重置为其 原始状态 。如果你想重置到一些不同的状态,你可以编写你自己的自定义工具作为 Bokeh 扩展,或者你可以只使用带有回调的 "reset button" 而不是标准的 ResetTool。听起来您实际上已经有了后者?如果是这样,也许你想要的是首先从绘图工具列表中删除 ResetTool,并且只向用户显示你的 "custom reset" 按钮。