Bokeh和Ipython交互器控制多个绘图元素

时间:2015-09-02 05:21:23

标签: ipython-notebook bokeh

我一直在使用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不移动任何东西。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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