散景和 Ipython 交互器控制多个情节元素

Bokeh and Ipython interactors to control more than one plot element

我一直在使用 Bokeh 服务器绘图和 Ipython 集成器,如 Bokeh 文档 here 中所述。我可以获得滑块来更新移动单条线的截距和斜率的参数,但是当我为另一条线添加代码时,该线也应该响应相同的参数变化而移动,只有第一条线发生变化。考虑:

import numpy as np
from bokeh.plotting import figure, show, output_notebook, ColumnDataSource
from bokeh.models import Range1d, ColumnDataSource
from ipywidgets import interact
output_notebook()

A = 300   # common intercept
b1 = 2    # slope line 1
b2 = 1/2  # slope line 2

x = np.linspace(0,500,100)
y0 = A - b1*x
y1 = A - b2*x

source = ColumnDataSource(data=dict(x=x, y0=y0, y1=y1))
TOOLS = "resize,reset,save,box_select"
p = figure(title='Two moving lines',tools=TOOLS)
p.x_range = Range1d(0, 500)
p.y_range = Range1d(0, 500)
p.line('x', 'y0', line_width=3, color='red', source=source)
p.line('x', 'y1', line_width=3, source=source)

def f(A, b1, b2):
    source.data['y0'] = A - b1*x
    source.data['yl'] = A - b2*x
    source.push_notebook()

show(p)

这会显示一条有两条线的图。下面的代码将显示 A、b1 和 b2 的滑块。

interact(f, A=(100,500,50), b1=(0.25,3,0.25), b2=(0.25,3,0.25) )

但是移动滑块 A 只移动第一行(尽管它应该移动两行),滑块 b1 移动第一行,滑块 b2 什么都不移动。有什么想法吗?

您的问题是由编辑器中的字体引起的。您的变量实际上是 "y1",如数字“1”,但您在 f() 中的代码设置为 "yl",如小写字母 "l"。如果您将 "yl" 修改为 "y1",那么您的代码可以正常工作。