Bokehサーバーストリーミングプロットの奇妙な自動更新動作が発生しました。本質的に、ストリーミングプロットでは、軸の範囲は自動的に更新されます。範囲を手動で変更すると、データが更新されるまで新しい範囲が保持されます。この時点で、軸範囲も更新されます。Python、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)
心配はいりません。私は答えがパン/ズームツールとリセットツールのソースコードにあると思う。パン/ズームツールの場合は、「プロットの自動更新をオフにする」と表示されます。それに対応して、残りのツールでは、「プロットの自動更新をオンにする」と言わなければなりません。ボタンコールバックに最初のコマンドを含めることができます。 しかし、ソースコードがどこにあるのか知る必要があります。 – Julian