Исходные данные обновляются, но сюжет никогда не обновляется - PullRequest
0 голосов
/ 10 июля 2019

Исходные данные обновляются при изменении выпадающего меню с помощью функции (filter_source) и могут наблюдать за выводом в терминале.Но график никогда не обновляется.

import pandas as pd
from bokeh.io import curdoc
from bokeh.models.widgets import TextInput, Button, Paragraph
from bokeh.layouts import layout
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Select
from bokeh.layouts import layout
import math

df = pd.read_csv('/Users/austinejose/Desktop/My Files/Work/Newcastle Service Station/2018/Feb_Totals.csv')
df1  = df[df['Department']=='Hot Food']
names = [str(x) for x in df1['Product Name']]
source  = ColumnDataSource(data = df1)

p = figure(x_range = names, plot_height = 500, width = 1000, title = "Sales By Departments",
           toolbar_location = "below")
p.vbar(x = "Product Name", top = "Retail Value", width = 0.9, source = source, color = 'deepskyblue')
p.xgrid.grid_line_color = "white"
p.y_range.start = 0
p.xaxis.major_label_orientation = math.pi/4
p.xaxis.axis_label = "Departments"
p.yaxis.axis_label = "Retail Value"
p.axis.minor_tick_in = -3
p.axis.minor_tick_out = 6
p.outline_line_color = "black"

def filter_source(attr, old, new):
    new_source = df[df['Department']==select.value]
    source.data = new_source
    names = [str(x) for x in new_source['Product Name']]

menus = df['Department'].unique().tolist()
select = Select(title = 'Choose Department', options = menus, value = 'Bill Pay')
select.on_change('value', filter_source)

lay_out=layout([[select]])
curdoc().add_root(p)
curdoc().add_root(lay_out)

Пока нет сообщений об ошибках.

1 Ответ

0 голосов
/ 11 июля 2019

РЕДАКТИРОВАТЬ: Начиная с версии 1.3, оригинальный код выше тоже будет работать

Если честно, я удивлен, что это не вызывает исключение.Свойство .data существующего CDS может быть установлено только из простого языка Python, который вы можете создать с помощью:

def filter_source(attr, old, new):
    new_df = df[df['Department']==select.value]
    source.data = ColumnDataSource.from_df(new_df)

Редактировать: оно делает , вызывает исключение для установкииз DataFrame, но, возможно, это трудно заметить в середине вывода консоли сервера.

...