2017-10-08 33 views
0

私はbokehでプロットを作成しましたが、今ではいくつかのウィジェットを追加しようとしています。現在、RangeSliderでx軸を変更したいのですが、コールバックに問題があると思います。事前にRangeSliderで軸の範囲を変更する

import pandas as pd 
import numpy as np 
import bokeh.plotting as bp 
from bokeh.models import CustomJS 
from bokeh.models.widgets import RangeSlider 
from bokeh.layouts import row, widgetbox 
from bokeh.plotting import figure, show, output_file 


df = pd.DataFrame(np.random.randint(0,30,size=(100, 3)), columns=list('ABC')) 
df.index.name ='Numbers' 
dt = bp.ColumnDataSource(df) 

output_file("Plot.html") 

p = figure(title="Example", 
     x_axis_label = "Number", y_axis_label = "Temperature in C", 
     x_range=(0,100)) 

p.line(source=dt, x='Numbers', y='A', color='blue', legend='Line A') 
p.line(source=dt, x='Numbers', y='B', color='red', legend='Line B') 
p.line(source=dt, x='Numbers', y='C', color='green', legend='Line C') 
p.legend.click_policy="hide" 

callback = CustomJS(args=dict(p=p), code=""" 
         var a = cb_obj.value; 
         p.x_range = a; 
         p.change.emit(); 
         """) 

range_slider = RangeSlider(start=0, end=100,value=(2,75), step=1, title="Test") 
range_slider.js_on_change('value', callback) 


layout = row(p,widgetbox(range_slider)) 
show(layout) 

ありがとう:あなたはコードを見つける同封!あなたが個別範囲にstartendを設定する必要が

答えて

0

callback = CustomJS(args=dict(p=p), code=""" 
    var a = cb_obj.value; 
    p.x_range.start = a[0]; 
    p.x_range.end = a[1]; 
""") 

はまた、emitへの呼び出しは不要です。

+0

恐ろしい!どうもありがとうございました! :) – Ailurus

関連する問題