簡體   English   中英

在Jupyter筆記本中,如何鏈接滑塊以更新bokeh中的繪圖?

[英]How can I link the slider to update my plot in bokeh while in a jupyter notebook?

我創建了運行蒙特卡洛模擬與迭代的一組號碼並返回結果為多列的熊貓數據幀(不是所有的都在這里使用。)目前,我想這個鏈接到一個情節函數調用ed_montecarlo與背景虛化,並有一個滑塊改變會在使用滑塊的新值重新運行功能。

我的代碼如下:

def modify_doc(doc):

    source = ColumnDataSource(ed_montecarlo(num=1000))

    TOOLS = "pan,wheel_zoom,box_zoom,reset,save"

    iter_scatter= figure(x_axis_label='Iteration Number', y_axis_label='Margin', title='Scatter Plot of Iterrations',
                         tools=TOOLS, plot_height=400, plot_width=550)

    iter_scatter.yaxis[0].formatter = NumeralTickFormatter(format="$0.00")

    dots = iter_scatter.scatter(x='index', y='Margin', source=source, fill_alpha=.5, line_color=None,
                            hover_fill_color='firebrick', hover_alpha=.9, hover_line_color=None, size=10)

    iter_scatter.line(x='index', y='Median Margin', source=source, line_color='cyan', line_width=5, line_alpha=0.8)

    band = Band(base='index', lower='25th Margin', upper='75th Margin', source=source, level='underlay',
            fill_alpha=0.3, line_width=3, line_alpha=.8, line_color='cyan', fill_color='cyan')

    iter_scatter.add_layout(band)

    iter_scatter.add_tools(HoverTool(tooltips=[('Iterration', '@index'),
                                           ('Margin', '$@Margin{%0.2f}')], 
                                 formatters={'Margin': 'printf',},
                                 renderers = [dots], mode='mouse'))
    def callback(attr, old, new):
        num = iter_slider.value


    iter_slider = Slider(start=100, end=5000, step=100, value=1000, title='Number of Iterations')
    iter_slider.on_change('value', callback) 

    doc.add_root(column(iter_slider, iter_scatter))

show(modify_doc)

當我運行上面的代碼時,散點圖可以使用1000次迭代正確顯示,但是,當我移動滑塊時,它不會重新運行蒙特卡洛函數並更新圖。 我想念什么? 我已經為此努力了好一陣子。

您的回調沒有做任何實際的工作。 您將滑塊的值分配給局部變量num (完全沒有其他影響),然后立即退出回調。 如果要更新圖,則必須更新數據源。 您尚未說出ed_montecarlo返回的類型是什么,但這可能與

def callback(attr, old, new):
    source.data = ed_montecarlo(num=iter_slider.value)

假設ed_montecarlo返回適當的Python dict 如果不是,則需要將其轉換為python dict,並以CDS列名稱作為鍵,將數據數組作為值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM