[英]How to make an interactive bokeh plot?
我第一次嘗試使用bokeh在網絡瀏覽器上進行交互式繪圖。 我繪制了一些圓,並且在單擊其中一個圓時想要一些交互(回調)。 我已經按照此處給出的示例進行操作,但是我失敗了……
當使用bokeh serve --show test.py
啟動腳本時,我看到有五個圓圈的情節,但是單擊任何圓圈時,我既看不到命令控制台上的任何打印輸出,也看不到繪制的第六個圓圈。
預期的行為:我看到五個圓圈,當我單擊其中的一個時,我希望有一個打印輸出(“測試”)並添加第六個圓圈(在坐標60/60處)。
也許完全是錯誤的工具? 無論如何,這是完整的代碼( test.py
):
from random import random
from bokeh.layouts import column
from bokeh.models import Button, TapTool
from bokeh.palettes import RdYlBu3
from bokeh.plotting import figure, curdoc
# create a plot and style its properties
p = figure(x_range=(0, 100), y_range=(0, 100), toolbar_location=None)
p.border_fill_color = 'black'
p.background_fill_color = 'black'
p.outline_line_color = None
p.grid.grid_line_color = None
p.circle([10, 20, 30, 40, 50], [60, 70, 20, 40, 50], size=20, color="navy", alpha=0.5)
def foo():
print("test")
p.circle([60], [60], size=20, color="navy", alpha=0.5)
taptool = p.select(type=TapTool)
taptool.callback = foo
# # put the button and plot in a layout and add to the document
curdoc().add_root(column(p))
PS:我希望能夠單擊這些圓,獲取它們的坐標,並在我一個接一個單擊的兩個圓之間動態繪制線。
當您想添加/刪除/修改打印數據時,最好將數據放在ColumnDataSource對象中,該對象可以有一個回調。
from bokeh.layouts import column
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, curdoc
p = figure(x_range=[0,100],y_range=[0,100],tools='tap')
source = ColumnDataSource(data={'x':[10, 20, 30, 40, 50],'y':[60, 70, 20, 40, 50]})
p.circle(x='x',y='y',size=20,source=source)
def foo(attr,old,new):
new_source_data = {'x':source.data['x']+[60],'y':source.data['y']+[60]}
source.data.update(new_source_data)
source.on_change('selected',foo)
curdoc().add_root(column(p))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.