Python Боке: после функции обратного вызова кнопки освежает мою фигуру - PullRequest
0 голосов
/ 27 мая 2020

Не могли бы вы помочь мне обновить sh мою фигуру? Я добавил новую переменную «p» в функцию обратного вызова, чтобы сбросить мою фигуру, но она не работает. Он просто показывает мне пустую фигуру. Каждый раз, когда я нажимаю кнопку, новый график накладывается поверх старого. Я пробовал использовать метод reset.emit (), но он говорит, что у объекта «Рисунок» нет атрибута «отдых». Я также хочу добавить заголовок к рисунку, но он содержит переменную. item_input, но не знаю с чего начать ...

сервер боке версии 2.0.2 Python 3.8.1 Торнадо 6.0.3

from pandas import read_csv
from pandas import to_datetime

from bokeh.layouts import column
from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, HoverTool, Title, TextInput, Button

source_data = 'somewhere'

def call_back():
    try:
        item_input = item.value

        df = read_csv(source_data)
        df1 = df[df['item'] == int(item_input)]

        title = str(item_input) + ' ' + df1.iloc[0]['name']

        source = ColumnDataSource(data=dict(
            system_qty = df1['system_qty'],
            man_date = to_datetime(df1['man_date']),
        ))

        p.circle(
            x='man_date', y='system_qty'
        )

        hover = HoverTool(
            tooltips = [
                ("Manufacturing Date", "@man_date{%Y-%m-%d}"),
                ("Reserved Qty", "@reserved_qty"),
            ],
            formatters = {
                '@man_date': 'datetime'
            },
        )

        p.add_tools(hover)
        p.add_layout(Title(text="Manufacturing Date", align="center"), "below")
        p.add_layout(Title(text="Quantity", align="center"), "left")

    except ValueError:
        raise

p = figure(x_axis_type='datetime')

item = TextInput(value='', title="Item:")

button = Button(label='Submit')
button.on_click(call_back)

curdoc().add_root(column(item, button, p))

1 Ответ

0 голосов
/ 27 мая 2020

Вызов методов p только один раз, не вызывайте их в обратном вызове. Кроме того, как правило, вы также должны создавать экземпляры моделей Bokeh только один раз, особенно ColumnDataSource. Создайте его один раз, а затем просто переназначьте его свойство data в обратном вызове.

...