2017-02-28 6 views
2

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) 

答えて

1

厳密には回答ではありませんが、私はコメントするほどの評判はありません。

これは、私がhtmlやノートブックの出力(サーバではない)で見た問題と似ているようです。なんらかの理由で、プログラムで設定された軸の限界が「スティック」していないようです(SO hereに関する質問とGitHub hereに関する問題)。初期化の両方のxとyの範囲を有する

+0

心配はいりません。私は答えがパン/ズームツールとリセットツールのソースコードにあると思う。パン/ズームツールの場合は、「プロットの自動更新をオフにする」と表示されます。それに対応して、残りのツールでは、「プロットの自動更新をオンにする」と言わなければなりません。ボタンコールバックに最初のコマンドを含めることができます。 しかし、ソースコードがどこにあるのか知る必要があります。 – Julian

2

は、「自動更新の振る舞いを無効にするようだ: f = figure(x_range=[0, 10], y_range=[0, 100]) あなたが後でそれらを変更した場合、実際の範囲があるか、どのような問題ではありません。

関連する問題