如何在bokeh python中根据下拉窗口小部件的值交互式地绘制条形图?

2024-04-16 11:01:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想绘制基于条形图的下拉窗口小部件的值。在

编码

import pandas as pd
from bokeh.io import output_file, show
from bokeh.layouts import widgetbox
from bokeh.models.widgets import Dropdown
from bokeh.plotting import curdoc
from bokeh.charts import Bar, output_file,output_server, show #use output_notebook to visualize it in notebook


df=pd.DataFrame({'item':["item1","item2","item2","item1","item1","item2"],'value':[4,8,3,5,7,2]})

menu = [("item1", "item1"), ("item2", "item2")]
dropdown = Dropdown(label="Dropdown button", button_type="warning", menu=menu)


def function_to_call(attr, old, new):

    df=df[df['item']==dropdown.value]    
    p = Bar(df, title="Bar Chart Example", xlabel='x', ylabel='values', width=400, height=400)
    output_server()    
    show(p)

dropdown.on_change('value', function_to_call)

curdoc().add_root(dropdown)

问题

  1. 我得到流动错误“UnboundLocalError:localvariable'df”在赋值之前引用“eventhough df已经创建。在
  2. 如何在下拉列表下方的网页中绘制条形图?在1中发出后显示它的语法是什么。解决了吗?在

Tags: tofromimportdfoutputvalueshowbokeh
1条回答
网友
1楼 · 发布于 2024-04-16 11:01:07

对于1.)在分配之前,您正在引用它。看看方括号内的df['item']==dropdown.value。这是在作业之前发生的。至于为什么这很重要,这就是Python的工作原理。默认情况下,函数中的所有赋值都会创建局部变量。但在赋值之前,只有全局值可用。Python告诉您,它不允许在单个函数中混合使用全局/本地。长话短说,在函数中重命名df变量:

subset = df[df['item']==dropdown.value]    
p = Bar(subset, ...) 

你需要把东西放在一个布局中(例如acolumn)。在项目文档和图库中有很多这样的例子。在

相关问题 更多 >