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

时间:2016-10-12 07:12:05

标签: 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)。这是行为吗?

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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