CheckBoxGroup不在Python / Bokeh中更新

问题描述 投票:0回答:1

我正在尝试为我们大学创建一个数据仪表板,并且在显示方式方面遇到了问题。我正在使用Bokeh和Python创建一些交互式图形。单击复选框选择专业学院时,我的复选框组未更新。我曾尝试更改几项,但无法弄清楚我在做什么错。

我的代码:

# Available college list
available_colleges = list(df['College'].unique())

source_maj = ColumnDataSource(df)
grouped_maj = df.groupby('Major').sum()
source_maj = ColumnDataSource(grouped_maj)
major = source_maj.data['Major'].tolist()

p_maj = figure(x_range=major, width=1100, height=500)
p_maj.xaxis.major_label_orientation = math.pi/4


color_map = factor_cmap(field_name='Major',
                    palette=Magma11, factors=level)

p_maj.vbar(x='Major', top='AY2018_19', source=source_maj, width=0.2, color=color_map)

p_maj.title.text ='Enrollment by Major'
p_maj.xaxis.axis_label = 'Major'
p_maj.yaxis.axis_label = 'Enrolled Students'

hover = HoverTool()
hover.tooltips = [
    ("2019-2020", "@AY2019_20"),
    ("2018-2019", "@AY2018_19"),
    ("2017-2018", "@AY2017_18")]

hover.mode = 'vline'


callback = CustomJS(args=dict(source=source_maj), code="""
    const labels = cb_obj.labels;
    const active = cb_obj.active;
    const data = source_maj.data;
    const sourceLen = data.combined.length;
    const combined = Array(sourceLen).fill(undefined);
    if (active.length > 0) {
        const selectedColumns = labels.filter((val, ind) => active.includes(ind));
        for(let i = 0; i < sourceLen; i++) {
            let sum = 0;
            for(col of selectedColumns){
                sum += Major[col][i];
            }
            combined[i] = sum;
        }
    }
    Major.combined=combined;
    source_maj.change.emit();
""")

colleges_selection = CheckboxGroup(labels=available_colleges, active = [0], callback=callback)

controls = WidgetBox(colleges_selection)
p_maj = row(controls, p_maj)

数据在正在读取的csv表中格式化

Sample Data

看起来像什么,但没有更新What current graph(s) look like

非常感谢您的帮助。

python-3.x bokeh bokehjs
1个回答
0
投票

您可能希望观看浏览器发送到javascript控制台的输出;它会告诉您这里出了什么问题。

[几个地方开始:您对CustomJS对象的参数引入了python对象'source_maj'并将其重命名为'source',但是在您的JS代码中,您将其称为'source_maj'。另外,您的JS代码引用了“主要”,但这不是JS知道的对象(即,它不是与args一起引入的)。

© www.soinside.com 2019 - 2024. All rights reserved.