我正在創(chuàng)建一個小型儀表板,我想在其中為用戶提供選項,以從Select框中選擇將在垂直軸上繪制的內(nèi)容。本質(zhì)上,給定框中的 aColumnDataSource和值更改Select,只需更改給定繪圖軸引用的列并更新繪圖。鑒于許多其他字形屬性可以是js_linkedwidgets,我認為這應(yīng)該是可能的。到目前為止,我見過的唯一實現(xiàn)是在 Bokeh Servers 中使用 Python 回調(diào),但我試圖避免使用 Bokeh Server。下面說明了這個想法:from bokeh.models import ColumnDataSource, Select, CustomJSfrom bokeh.plotting import figurefrom bokeh.layouts import columnfrom bokeh.io import output_notebook, output_file, showoutput_file('foo.html')source = ColumnDataSource( { 'x': [0, 1, 2, 3], 'y': [0, 1, 4, 9], 'z': [0, 2, 3, 1], })fig = figure()line = fig.line(x='x', y='y', source=source)dropdown = Select(value='y', options=['y','z'])dropdown.js_link('value', line.glyph, 'y')layout = column(dropdown, fig)show(layout)我還嘗試了以下方法,我認為它在功能上是相同的,但我想更明確:from bokeh.models import ColumnDataSource, Select, CustomJSfrom bokeh.plotting import figurefrom bokeh.layouts import columnfrom bokeh.io import output_file, showoutput_file('foo.html')source = ColumnDataSource( { 'x': [0, 1, 2, 3], 'y': [0, 1, 4, 9], 'z': [0, 2, 3, 1], })fig = figure()line = fig.line(x='x', y='y', source=source)dropdown = Select(value='y', options=['y','z'])dropdown.js_on_change( 'value', CustomJS( args={ 'glyph': line.glyph, 'source': source, }, code=""" var new_vert = cb_obj.value; glyph.y = new_vert; """))layout = column(dropdown, fig)show(layout)在這兩種情況下,HTML 都會在瀏覽器中呈現(xiàn)而不會出現(xiàn)錯誤,但是一旦Select值發(fā)生變化,線圖就會消失,而不是繪制選定的CDS系列。我嘗試在瀏覽器中進行檢查,但沒有返回 JS 錯誤。我是否遺漏了某些東西,或者如果沒有 Bokeh Server 就無法做到這一點?編輯:我還應(yīng)該補充一點,我試圖避免CDS在 a 中創(chuàng)建第二個和復(fù)制數(shù)據(jù)CustomJS,因為我有多個子圖共享一個CDS,我不想為每個圖創(chuàng)建一個新的,以便它們的行為保持鏈接.
2 回答

慕俠2389804
TA貢獻1719條經(jīng)驗 獲得超6個贊
經(jīng)過一番挖掘,我發(fā)現(xiàn)這個問題的最佳解決方案是為用戶可能想要的每個數(shù)據(jù)分組創(chuàng)建一個 CDSView,并將每個分組添加為自己的字形。完成后,您可以使用 CustomJS 回調(diào)按照您想要的任何標(biāo)準切換每個字形的可見性。

慕蓋茨4494581
TA貢獻1850條經(jīng)驗 獲得超11個贊
的值y
實際上是一個對象,它指定該值是否應(yīng)該是單個固定值,即來自 CDS 的值序列。python API 在很大程度上隱藏了所有這些。長話短說,您將需要使用第二個版本,并將作業(yè)更改為
glyph.y = {field: new_vert};
添加回答
舉報
0/150
提交
取消