簡體   English   中英

如何制作交互式散景圖?

[英]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.

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