Создание интерактивного виджета в Bokeh с использованием TextInput для изменения графика - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь понять, как создать интерактивный виджет с Bokeh. Цель состоит в том, чтобы поле TextInput изменило значение x в коде и, в свою очередь, изменило положение точки на графике.

Если кто-то может помочь мне с примером и описать, каким я должен быть обучение для достижения этой цели будет с благодарностью!

from bokeh.plotting import *
from bokeh.models import *
from bokeh.io import *
from bokeh.transform import *
from bokeh.layouts import *
import numpy as np

x = 1
y = 5

def x_funtion(x):
    x_value = x*4
    return x_value

number = x_funtion(x)

def handler(attr, old, new):
    global number
    number = x_funtion(new)
    return number

text_input = TextInput(value=str(x), title="x")
text_input.on_change("value", handler)



p =figure()
p.circle(number,y)


curdoc().title = "Hello, world!"
curdoc().add_root(row(p,text_input))

1 Ответ

1 голос
/ 26 апреля 2020

Есть разные способы справиться с этим, но в долгосрочной перспективе лучше использовать ColumnDataSource. В общем, когда вы хотите обновить что-то, что управляется Bokeh, вы хотите изменить уже существующие модели Bokeh.

from bokeh.layouts import *
from bokeh.models import *
from bokeh.plotting import *


def x_function(x):
    x_value = x * 4
    return x_value


x_init = 1
ds = ColumnDataSource(data=dict(x=[x_function(x_init)], y=[5]))


def handler(attr, old, new):
    try:
        new = int(new)
    except ValueError:
        pass
    else:
        ds.data['x'] = [x_function(new)]


text_input = TextInput(value=str(x_init), title="x")
text_input.on_change("value", handler)

p = figure()
p.circle('x', 'y', source=ds)

curdoc().title = "Hello, world!"
curdoc().add_root(row(p, text_input))
...