Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Bokeh/Python/Pywidgets中使一个滑块/小部件更新多个绘图?_Javascript_Python_Jupyter Notebook_Bokeh_Ipywidgets - Fatal编程技术网

Javascript 如何在Bokeh/Python/Pywidgets中使一个滑块/小部件更新多个绘图?

Javascript 如何在Bokeh/Python/Pywidgets中使一个滑块/小部件更新多个绘图?,javascript,python,jupyter-notebook,bokeh,ipywidgets,Javascript,Python,Jupyter Notebook,Bokeh,Ipywidgets,使用Jupyter笔记本,如何让一个滑块在两个数字中交互更新两个独立的功能? 有一个链接指向一个没有答案的类似问题 使用Bokeh,我尝试添加第二组变量x和y,但继续使用相同的回调。图形不再更新。 有什么建议吗?我也试着用Pywidget做同样的事情,但没有成功。如果有解决方案,我更喜欢使用IPywidget。 最终目标是拥有一个仪表板,其输入由多个滑块组成,输出由多个绘图组成,所有绘图都依赖于同一组滑块输入 from bokeh.layouts import column from bokeh

使用Jupyter笔记本,如何让一个滑块在两个数字中交互更新两个独立的功能? 有一个链接指向一个没有答案的类似问题

使用Bokeh,我尝试添加第二组变量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)
来自bokeh.layouts导入列
从bokeh.models导入CustomJS、ColumnDataSource和Slider
从bokeh.plotting导入图形,输出\ U笔记本,显示
输出_笔记本()
x=[x*0.005表示范围内的x(0200)]
y=x
x1=[x1*0.005,适用于范围(0200)内的x1]
y1=x1
source=ColumnDataSource(数据=dict(x=x,y=y))
source1=列数据源(data=dict(x1=x1,y1=y1))
绘图=图形(绘图宽度=400,绘图高度=400)
绘图线('x','y',震源=震源,线宽=3,线α=0.6)
图1=图形(图宽=400,图高=400)
图1.线('x1','y1',源=源1,线宽度=3,线α=0.6)
callback=CustomJS(args=dict(source=source,source1=source1),code=“”
var数据=source.data;
var data1=source1.data;
var f1=cb_对象值
var f=cb_对象值
x=数据['x']
y=数据['y']
x1=数据['x1']
y1=数据['y1']
对于(i=0;i
下面显示了带有滑块的两个图形的快照。滑块未更新任何图形。
.

您只需稍加修改即可:

替换

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


除此之外,您的示例非常有效,谢谢!我希望其他人会觉得它有用。

谢谢你,成功了!现在尝试在Bokeh中进行多滑块控制多个绘图,如果需要,将发布另一个问题。你知道我们怎样才能在Ipywidget中获得同样的结果吗?@AliTarraf如果答案对你有帮助的话,如果你把它标记为已接受,那就太好了。关于Ipywidget-对不起,我从未使用过它。
x1 = data1['x1']
y1 = data1['y1']