散景和 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",那么您的代码可以正常工作。
我一直在使用 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",那么您的代码可以正常工作。