第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何定義 Python Bokeh RangeSlider.on_change 回調(diào)函數(shù)來更改繪圖的

如何定義 Python Bokeh RangeSlider.on_change 回調(diào)函數(shù)來更改繪圖的

湖上湖 2023-12-12 21:15:37
我正在嘗試為 RangeSlider 實(shí)現(xiàn) python 回調(diào)函數(shù)。滑塊值應(yīng)該告訴 IndexFilter 應(yīng)顯示哪個(gè)索引。例如:如果 Rangeslider.value 為 (3, 25),我的繪圖應(yīng)僅包含/查看索引從 3 到 25 的數(shù)據(jù)。from bokeh.io import output_file, showfrom bokeh.models import ColumnDataSource, GMapOptions, CustomJS, CDSView, IndexFilterfrom bokeh.plotting import gmap, ColumnDataSource, figurefrom bokeh.layouts import column, rowfrom bokeh.models.widgets import RangeSlider import numpy as npdef slider_callback(attr, old, new):        p.view = CDSView(source=source, filters=[IndexFilter(np.arange(new.value[0], new.value[1]))])        v.view = CDSView(source=source, filters=[IndexFilter(np.arange(new.value[0], new.value[1]))])# data setlon = [[48.7886, 48.7887, 48.7888, 48.7889, 48.789],         [48.7876, 48.7877, 48.78878, 48.7879, 48.787],         [48.7866, 48.7867, 48.7868, 48.7869, 48.786],        [48.7856, 48.7857, 48.7858, 48.7859, 48.785],        [48.7846, 48.7847, 48.7848, 48.7849, 48.784]]lat = [[8.92, 8.921, 8.922, 8.923, 8.924],        [8.91, 8.911, 8.912, 8.913, 8.914],        [8.90, 8.901, 8.902, 8.903, 8.904],        [8.89, 8.891, 8.892, 8.893, 8.894],        [8.88, 8.881, 8.882, 8.883, 8.884]]time = [0, 1, 2, 3, 4, 5]velocity = [23, 24, 25, 24, 20]lenght_dataset = len(lon)# define source and mapsource = ColumnDataSource(data = {'x': lon, 'y': lat, 't': time, 'v': velocity})view = CDSView(source=source, filters=[IndexFilter(np.arange(0, lenght_dataset))])map_options = GMapOptions(lat=48.7886, lng=8.92, map_type="satellite", zoom=13)p = gmap("MY_API_KEY", map_options, title="Trajectory Map")v = figure(plot_width=400, plot_height=400, title="Velocity")# plot lines on mapp.multi_line('y', 'x', view=view, source=source, line_width=1)v.line('t', 'v', view=view, source=source, line_width=3)# slider to limit plotted datarange_slider = RangeSlider(title="Data Range Slider: ", start=0, end=lenght_dataset, value=(0, lenght_dataset), step=1) range_slider.on_change('value', slider_callback)
查看完整描述

1 回答

?
開滿天機(jī)

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊

一些注意事項(xiàng):

  • time比其余列長(zhǎng) - 您將收到有關(guān)它的警告。在下面的代碼中,我剛剛刪除了它的最后一個(gè)元素

  • view一般來說,帶有過濾器不應(yīng)該用于像線條這樣的連續(xù)字形(v.line特別是 -multi_line很好)。您將收到有關(guān)它的警告。但如果 中的索引IndexFilter始終是連續(xù)的,那么應(yīng)該沒問題。無論哪種方式,您都可以使用段字形來避免警告

  • 在回調(diào)中,您嘗試設(shè)置圖形視圖 - 視圖僅存在于字形渲染器上

  • 一般來說,您不想重新創(chuàng)建視圖,而是希望重新創(chuàng)建盡可能少的 Bokeh 模型。理想情況下,您只需更改indices過濾器的字段即可。但是 Bokeh 中缺少一些連線,因此您必須設(shè)置filters視圖的字段,如下所示

  • newPython 回調(diào)的參數(shù)接收作為第一個(gè)參數(shù)傳遞給相應(yīng)調(diào)用的屬性的新值on_change。在這種情況下,它將是一個(gè)元組,因此new.value[0]您應(yīng)該使用new[0]

  • 由于您已決定使用 Python 回調(diào),因此您不能再使用show和 靜態(tài) HTML 文件 - 您必須使用curdoc().add_rootbokeh serve。UI 需要 Python 代碼在運(yùn)行時(shí)的某個(gè)位置運(yùn)行

  • 更改滑塊值時(shí),您會(huì)注意到單獨(dú)的部分multi_line將連接在一起 - 這是一個(gè)錯(cuò)誤,我剛剛為其創(chuàng)建了https://github.com/bokeh/bokeh/issues/10589

這是一個(gè)工作示例:

from bokeh.io import curdoc

from bokeh.layouts import column, row

from bokeh.models import GMapOptions, CDSView, IndexFilter

from bokeh.models.widgets import RangeSlider

from bokeh.plotting import gmap, ColumnDataSource, figure


lon = [[48.7886, 48.7887, 48.7888, 48.7889, 48.789],

       [48.7876, 48.7877, 48.78878, 48.7879, 48.787],

       [48.7866, 48.7867, 48.7868, 48.7869, 48.786],

       [48.7856, 48.7857, 48.7858, 48.7859, 48.785],

       [48.7846, 48.7847, 48.7848, 48.7849, 48.784]]

lat = [[8.92, 8.921, 8.922, 8.923, 8.924],

       [8.91, 8.911, 8.912, 8.913, 8.914],

       [8.90, 8.901, 8.902, 8.903, 8.904],

       [8.89, 8.891, 8.892, 8.893, 8.894],

       [8.88, 8.881, 8.882, 8.883, 8.884]]

time = [0, 1, 2, 3, 4]

velocity = [23, 24, 25, 24, 20]

lenght_dataset = len(lon)


# define source and map

source = ColumnDataSource(data={'x': lon, 'y': lat, 't': time, 'v': velocity})

view = CDSView(source=source, filters=[IndexFilter(list(range(lenght_dataset)))])


map_options = GMapOptions(lat=48.7886, lng=8.92, map_type="satellite", zoom=13)


p = gmap("API_KEY", map_options, title="Trajectory Map")

v = figure(plot_width=400, plot_height=400, title="Velocity")


p.multi_line('y', 'x', view=view, source=source, line_width=1)

v.line('t', 'v', view=view, source=source, line_width=3)


range_slider = RangeSlider(title="Data Range Slider: ", start=0, end=lenght_dataset, value=(0, lenght_dataset), step=1)



def slider_callback(attr, old, new):

    view.filters = [IndexFilter(list(range(*new)))]



range_slider.on_change('value', slider_callback)


layout = row(column(p, range_slider), column(v))

curdoc().add_root(layout)


查看完整回答
反對(duì) 回復(fù) 2023-12-12
  • 1 回答
  • 0 關(guān)注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)