Python,Bokeh:如何关闭轴的自动更新

时间:2017-02-28 16:12:34

标签: python streaming bokeh auto-update

我遇到了Bokeh服务器流图的奇怪的自动更新行为。基本上,通过流图,轴范围会自动更新。手动更改范围后,新范围将一直持续到数据更新为止。此时,轴范围也会更新。

可以使用任何平移或缩放工具“关闭”此行为。例如,如果缩小绘图,则轴范围不再自动更新,并且手动更改的范围将被锁定。

但是,使用“重置”工具后,将再次激活旧行为。

以下代码显示了该行为。启动脚本并单击按钮。 y轴范围变为0:50。更新数据后,范围将跳回其原始设置。但是,如果平移绘图然后单击按钮,则范围将保持在0:50,直到您重置为止。

我现在想知道如何在点击按钮后关闭自动范围更新

# Import libraries
from bokeh.io import curdoc
from bokeh.models import ColumnDataSource, Range1d, LinearAxis
from bokeh.models.widgets import Button
from bokeh.layouts import layout
from bokeh.plotting import figure
from random import randrange


# Create figure
f=figure()

# Create ColumnDataSource
source = ColumnDataSource(dict(x=[],y=[]))

# Create Line
f.line(x='x',y='y',source=source)

def update_all():
    new_data=dict(x=[randrange(1,10)],y=[randrange(1,10)])
    source.stream(new_data,rollover=15)

# Update axis function
def update_axis():
    f.y_range.start = 0 
    f.y_range.end   = 50

# Create Button
button = Button(label='Set Axis')

# Update axis range on click
button.on_click(update_axis)

# Add elements to curdoc 
lay_out=layout([[f, button]])
curdoc().add_root(lay_out)
curdoc().add_periodic_callback(update_all,2000)

3 个答案:

答案 0 :(得分:3)

初始化x和y范围似乎禁用了“自动更新”行为: f = figure(x_range=[0, 10], y_range=[0, 100]) 无论实际范围是什么,或者您以后更改它们都无关紧要。

答案 1 :(得分:1)

道歉,如果这不是严格意义上的答案,但我没有足够的声誉来评论。

这似乎与我用html或笔记本输出(不是服务器)观察到的问题类似。出于某种原因,以编程方式设置轴限制似乎并没有“坚持”。 (有关SO here的问题和GitHub上的问题here)。

答案 2 :(得分:0)

显然为两个轴中的一个明确指定一个Range1D会关闭自动缩放功能。

description here responding to a similar question对此进行了描述。

默认的DataRange1d对象执行自动缩放。