簡體   English   中英

如何使一個滑塊/小部件更新Bokeh / Python / Pywidget中的多個圖?

[英]How to make one slider/widget update multiple plots in Bokeh/Python/Pywidgets?

使用Jupyter筆記本, 如何使一個滑塊以兩個圖形交互地更新兩個獨立的功能? 還有一個類似的問題的鏈接沒有答案在這里

使用Bokeh Javascript Callback滑塊功能示例 ,我嘗試添加第二組變量x和y,但繼續使用相同的回調。 圖形不再更新。 有什么建議么? 我也嘗試對Pywidget進行同樣的操作,但沒有成功。 如果有解決方案,我寧願使用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)

帶有滑塊的兩個圖形的快照如下所示。 滑塊不更新任何圖形。 滑塊和兩個圖

您只需要稍作修正:

更換

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

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

除此之外,您的示例效果很好,謝謝! 我希望其他人會發現它有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM