Python 如何通过回调函数将一个Bokeh小部件的输出用作另一个小部件的输入?
我有一个数据框架,其中包含一些公司的随机特征(因素)。我想在第一个小部件中选择一个因素,然后相应地更新第二个小部件的最小值和最大值。我尝试了下面的代码,但由于我不是JS方面的专家,我真的不知道如何处理。欢迎您的帮助或提示 事先非常感谢 马修Python 如何通过回调函数将一个Bokeh小部件的输出用作另一个小部件的输入?,python,callback,widget,bokeh,Python,Callback,Widget,Bokeh,我有一个数据框架,其中包含一些公司的随机特征(因素)。我想在第一个小部件中选择一个因素,然后相应地更新第二个小部件的最小值和最大值。我尝试了下面的代码,但由于我不是JS方面的专家,我真的不知道如何处理。欢迎您的帮助或提示 事先非常感谢 马修 import math import numpy as np import pandas as pd import random import matplotlib.pyplot as plt from bokeh.plotting import figur
import math
import numpy as np
import pandas as pd
import random
import matplotlib.pyplot as plt
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool,CustomJS
from bokeh.sampledata.autompg import autompg_clean as df
from bokeh.models.widgets import Slider, Select, TextInput,RangeSlider,DataTable,TableColumn
from bokeh.layouts import layout, column
CompanyList = ['00', '01', '02','03']
a = pd.DataFrame({
'Factor1' : [random.randint(0, 10) for t in range(4)],
'Factor2' : [random.randint(0,100) for t in range(4)],
'Factor3' : [random.randint(0,1000) for t in range(4)],
'CompanyNo' : CompanyList})
a =a.set_index('CompanyNo')
C1 = Select(title="Constraint No1", options=sorted(list(a.columns)), value='Factor1')
R1 = RangeSlider(title="Range Constraint 2",value=(a[C1.value].min(),a[C1.value].max()),start=a[C1.value].min(),end=a[C1.value].max(),step=0.1,width=300)
这部分我需要帮助:
由于
DataFrame
不可序列化,因此必须以列表格式单独传递其列。我在BokehV1.1.0中测试了代码
import math
import numpy as np
import pandas as pd
import random
import matplotlib.pyplot as plt
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool, CustomJS
from bokeh.sampledata.autompg import autompg_clean as df
from bokeh.models.widgets import Slider, Select, TextInput, RangeSlider, DataTable, TableColumn
from bokeh.layouts import layout, column
CompanyList = ['00', '01', '02', '03']
a = pd.DataFrame({
'Factor1' : [random.randint(0, 10) for t in range(4)],
'Factor2' : [random.randint(0, 100) for t in range(4)],
'Factor3' : [random.randint(0, 1000) for t in range(4)],
'CompanyNo' : CompanyList})
a = a.set_index('CompanyNo')
C1 = Select(title = "Constraint 1", options = sorted(list(a.columns)), value = 'Factor1')
R1 = RangeSlider(title = "Range Constraint 2", value = (a[C1.value].min(), a[C1.value].max()), start = a[C1.value].min(), end = a[C1.value].max(), step = 0.1, width = 300)
C1.callback = CustomJS(args = dict(R1 = R1, C1 = C1, Factor1 = a['Factor1'].values, Factor2 = a['Factor2'].values, Factor3 = a['Factor3'].values), code = """
array = eval(C1.value)
R1.start = Math.min(...array);
R1.end = Math.max(...array);
R1.value = [Math.min(...array), Math.max(...array)];
""")
show(column(C1, R1))
非常感谢你的帮助!我真的被卡住了。顺便问一下,你知道有一本书或一个网站可以让我学习JS的基础知识吗?
import math
import numpy as np
import pandas as pd
import random
import matplotlib.pyplot as plt
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool, CustomJS
from bokeh.sampledata.autompg import autompg_clean as df
from bokeh.models.widgets import Slider, Select, TextInput, RangeSlider, DataTable, TableColumn
from bokeh.layouts import layout, column
CompanyList = ['00', '01', '02', '03']
a = pd.DataFrame({
'Factor1' : [random.randint(0, 10) for t in range(4)],
'Factor2' : [random.randint(0, 100) for t in range(4)],
'Factor3' : [random.randint(0, 1000) for t in range(4)],
'CompanyNo' : CompanyList})
a = a.set_index('CompanyNo')
C1 = Select(title = "Constraint 1", options = sorted(list(a.columns)), value = 'Factor1')
R1 = RangeSlider(title = "Range Constraint 2", value = (a[C1.value].min(), a[C1.value].max()), start = a[C1.value].min(), end = a[C1.value].max(), step = 0.1, width = 300)
C1.callback = CustomJS(args = dict(R1 = R1, C1 = C1, Factor1 = a['Factor1'].values, Factor2 = a['Factor2'].values, Factor3 = a['Factor3'].values), code = """
array = eval(C1.value)
R1.start = Math.min(...array);
R1.end = Math.max(...array);
R1.value = [Math.min(...array), Math.max(...array)];
""")
show(column(C1, R1))