You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

切换DataFile后Bokeh图表未更新问题求助

问题原因及解决方法

你的问题出在回调里只是切换了局部变量source,但图表绑定的始终是最初的source1,并没有实际更新图表使用的数据源数据。虽然控制台能看到source2的数据,但图表根本没用到这个新的数据源对象。

修复后的代码

import numpy as np
import pandas as pd
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource, HoverTool, CustomJS
from bokeh.models.widgets import RadioGroup
from bokeh.layouts import row

def main():
    df1 = pd.DataFrame(data={'ABC1': [1, 2, 3, 4, 5, 6], 'ABC2': [10, 20, 30, 40, 50, 60], 'score': [100, 200, 300, 400, 500, 600]})
    source1 = ColumnDataSource(df1)

    df2 = pd.DataFrame(data={'ABC1': [11, 12, 13, 14, 15, 16], 'ABC2': [10, 20, 30, 40, 50, 60], 'score': [100, 200, 300, 400, 500, 600]})
    source2 = ColumnDataSource(df2)

    # 定义一个主数据源,绑定给图表
    source = ColumnDataSource(df1)

    p = figure(title='ABC Visualization', x_axis_label='ABC1', y_axis_label='ABC2', toolbar_location='above')
    p.scatter("ABC1", "ABC2", source=source)

    hover = HoverTool(tooltips=[('Cell Name', '@index')], mode='mouse')
    p.add_tools(hover)

    radio_group = RadioGroup(labels=['File 1', 'File 2'], active=0)

    # 修改后的回调:把选中数据源的数据复制到主source中
    radio_callback = CustomJS(args=dict(source=source, source1=source1, source2=source2), code="""
        console.log('radio_group: active=' + this.active)
        // 根据选中项获取对应数据源的数据
        const new_data = this.active === 0 ? source1.data : source2.data;
        // 更新主数据源的数据
        source.data = new_data;
        // 触发更新事件
        source.change.emit()
    """)

    radio_group.js_on_change('active', radio_callback)

    layout = row(radio_group, p)
    show(layout)

if __name__ == "__main__":
    main()

关键修改点

  • 单独创建一个source作为图表绑定的主数据源,不再直接赋值为source1
  • 回调中不再切换数据源对象,而是把source1或source2的数据内容复制到主source的data属性里
  • 触发source.change.emit()通知图表更新

这样操作后,点击File2时,图表会读取主数据源更新后的内容,就能正常显示新数据了。

内容的提问来源于stack exchange,提问作者Sandeep Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:27:41