如何将源列表传递给散景 python 中的 'from_py_func' 回调?
How to pass a list of sources to 'from_py_func' callback in bokeh python?
在 CustomJS with a Python function example 中,回调正在从变量 'source' 中获取数据。我也想传'source',但是我的'source'实际上是一个由列数据源组成的列表
我试过:
def 回调(来源,window=None):
对于我在范围内(来源):
数据 = 源[i].数据
我曾尝试将我的源合并为一个最终源,但由于列长度不相同而出现错误(这是我首先制作列数据源列表的原因)。
我见过的唯一成功的是:
def 回调(源=源[0],window=None):
但这只会改变我的一个数据集。
这是我目前的完整代码,仅适用于第一个来源:
def SMAcallback(source=source[0], window=None):
data = source.data
f = cb_obj.value
x, y = data['x'], data['y']
topx, midx, botx, = data['topx'], data['midx'], data['botx']
topy, midy, boty, = data['topy'], data['midy'], data['boty']
avg = sum(y) * 1.0 / len(y)
variance = map(lambda t: (t - avg) ** 2, y)
varAvg = sum(variance) * 1.0 / len(variance)
std_dev = window.Math.sqrt(varAvg)
y_avg = []
x_day_list = []
for d in range(0, f - 1):
y_avg.append("Nan")
x_day_list.append("NaN")
for d in range(f, len(y)):
tot = sum(y[d - f:d])
avg = tot / f
y_avg.append(avg)
x_day_list.append(x[d])
top_Band = []
bot_Band = []
mid_Band = []
curSD = std_dev
curSMA = y_avg
for i in range(len(y)):
top_Band.append(curSMA[i] + (curSD * 2))
bot_Band.append(curSMA[i] - (curSD * 2))
mid_Band.append(curSMA[i])
for i in range(len(y)):
topy[i] = top_Band[i]
midy[i] = mid_Band[i]
boty[i] = bot_Band[i]
topx[i] = x_day_list[i]
midx[i] = x_day_list[i]
botx[i] = x_day_list[i]
source.change.emit()
SMAwindow_slider = Slider(start=1, end=100, value=20, step=1,
title="SMA Window(days)", callback=CustomJS.from_py_func(SMAcallback))
我正在尝试制作一个滑块来改变我们计算简单移动平均线的日期。我想我可以为每个单独的来源制作一个滑块,但它看起来不太好。
我能想到的唯一解决方案是将所有 python 代码转换为 javascript。这样我就可以传递一个包含 "source" 变量的字典。然后我可以调用 javascript 中的每个源 - source0、source1、source2 等
我知道这是可能的,但我对 javascript 的熟悉程度不如 python。
在 CustomJS with a Python function example 中,回调正在从变量 'source' 中获取数据。我也想传'source',但是我的'source'实际上是一个由列数据源组成的列表
我试过:
def 回调(来源,window=None):
对于我在范围内(来源):
数据 = 源[i].数据
我曾尝试将我的源合并为一个最终源,但由于列长度不相同而出现错误(这是我首先制作列数据源列表的原因)。
我见过的唯一成功的是:
def 回调(源=源[0],window=None):
但这只会改变我的一个数据集。
这是我目前的完整代码,仅适用于第一个来源:
def SMAcallback(source=source[0], window=None):
data = source.data
f = cb_obj.value
x, y = data['x'], data['y']
topx, midx, botx, = data['topx'], data['midx'], data['botx']
topy, midy, boty, = data['topy'], data['midy'], data['boty']
avg = sum(y) * 1.0 / len(y)
variance = map(lambda t: (t - avg) ** 2, y)
varAvg = sum(variance) * 1.0 / len(variance)
std_dev = window.Math.sqrt(varAvg)
y_avg = []
x_day_list = []
for d in range(0, f - 1):
y_avg.append("Nan")
x_day_list.append("NaN")
for d in range(f, len(y)):
tot = sum(y[d - f:d])
avg = tot / f
y_avg.append(avg)
x_day_list.append(x[d])
top_Band = []
bot_Band = []
mid_Band = []
curSD = std_dev
curSMA = y_avg
for i in range(len(y)):
top_Band.append(curSMA[i] + (curSD * 2))
bot_Band.append(curSMA[i] - (curSD * 2))
mid_Band.append(curSMA[i])
for i in range(len(y)):
topy[i] = top_Band[i]
midy[i] = mid_Band[i]
boty[i] = bot_Band[i]
topx[i] = x_day_list[i]
midx[i] = x_day_list[i]
botx[i] = x_day_list[i]
source.change.emit()
SMAwindow_slider = Slider(start=1, end=100, value=20, step=1,
title="SMA Window(days)", callback=CustomJS.from_py_func(SMAcallback))
我正在尝试制作一个滑块来改变我们计算简单移动平均线的日期。我想我可以为每个单独的来源制作一个滑块,但它看起来不太好。
我能想到的唯一解决方案是将所有 python 代码转换为 javascript。这样我就可以传递一个包含 "source" 变量的字典。然后我可以调用 javascript 中的每个源 - source0、source1、source2 等
我知道这是可能的,但我对 javascript 的熟悉程度不如 python。