我遇到了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)
答案 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
对象执行自动缩放。