源数据正在更新,但绘图从未更新

时间:2019-07-10 20:48:54

标签: python bokeh

使用功能(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 :(得分:0)

编辑:从1.3版开始,上面的原始代码也将起作用

说实话,我很惊讶这没有引发例外。现有CDS的.data属性只能通过简单的Python字典进行设置,您可以使用以下命令创建它:

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

编辑:确实引发了要从DataFrame进行设置的异常,但是在服务器控制台输出的中间可能很难注意到。