2017-11-09 1 views
1

Jupyter 노트북을 사용하여 두 슬라이더에서 두 개의 독립적 인 기능을 한 슬라이더로 대화식으로 업데이트하는 방법은 무엇입니까? 대답이없는 유사한 질문에 대한 링크가 있습니다 here.Bokeh/Python/Pywidgets에서 하나의 슬라이더/위젯을 여러 플롯으로 업데이트하는 방법은 무엇입니까?

Bokeh Javascript Callback slider power example을 사용하여 두 번째 변수 x와 y를 추가했지만 동일한 콜백을 계속 사용했습니다. 그래프가 더 이상 업데이트되지 않습니다. 제안 사항이 있으십니까? 나도 파이 위 젯과 같은 일을하려했지만 어디에도 가지 않았다. 거기에 해결책이있는 경우 IPywidget 사용을 선호합니다. 최종 목표는 입력이 여러 슬라이더로 구성된 대시 보드를 갖는 것이며 여러 입력으로 구성된 출력은 모두 동일한 슬라이더 입력 세트에 종속됩니다.

from bokeh.layouts import column 
from bokeh.models import CustomJS, ColumnDataSource, Slider 
from bokeh.plotting import Figure, output_notebook, show 

output_notebook() 

x = [x*0.005 for x in range(0, 200)] 
y = x 
x1 = [x1*0.005 for x1 in range(0, 200)] 
y1 = x1 

source = ColumnDataSource(data=dict(x=x, y=y)) 
source1 = ColumnDataSource(data=dict(x1=x1,y1=y1)) 

plot = Figure(plot_width=400, plot_height=400) 
plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6) 

plot1 = Figure(plot_width=400, plot_height=400) 
plot1.line('x1', 'y1', source=source1, line_width=3, line_alpha=0.6) 

callback = CustomJS(args=dict(source=source, source1=source1), code=""" 
    var data = source.data; 
    var data1 = source1.data; 
    var f1 =cb_obj.value 
    var f = cb_obj.value 
    x = data['x'] 
    y = data['y'] 
    x1 = data['x1'] 
    y1 = data['y1'] 

    for (i = 0; i < x.length; i++) { 
     y[i] = Math.pow(x[i], f) 
    } 
    for (i = 0; i < x1.length; i++) { 
     y1[i] = Math.pow(x1[i], f1) 
    } 
    source.change.emit(); 
    source1.change.emit(); 
""") 

slider = Slider(start=0.1, end=4, value=1, step=.1, title="power") 
slider.js_on_change('value', callback) 

layout = column(slider, plot,plot1) 

show(layout) 

슬라이더가있는 두 그래프의 스냅 샷은 아래와 같습니다. 슬라이더가 그래프를 업데이트하지 않습니다. Slider and two plots.

답변

1

당신은 단지 약간의 수정이 필요합니다

는 그것과는 별도로

x1 = data1['x1'] 
y1 = data1['y1'] 

x1 = data['x1'] 
y1 = data['y1'] 

교체, 귀하의 예제는 잘 작동합니다, 감사합니다! 다른 사람들이 유용하다고 생각하기를 바랍니다.

+0

감사합니다. 이제 Bokeh에서 여러 슬라이더 제어 다중 플롯을 수행하려고 할 때 필요한 경우 다른 질문을 게시합니다. Ipywidget에서 같은 결과를 얻을 수있는 방법을 알고 있습니까? –

+0

@AliTarraf 도움이된다면 답변을 허용으로 표시하면 좋을 것입니다. Ipywidget에 관해서 - 미안, 나는 그것을 사용한 적이 없다. –

관련 문제