【问题标题】:How to plot bar graph interactively based on value of dropdown widget in bokeh python?如何根据散景python中下拉小部件的值交互式绘制条形图?
【发布时间】:2016-12-31 08:13:42
【问题描述】:

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

代码

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: local variable 'df' referenced before assignment”,尽管 df 已经创建。
  2. 如何在下拉菜单下方的网页中绘制条形图?解决 1. 中的问题后显示它的语法是什么?

【问题讨论】:

    标签: python matplotlib plot data-visualization bokeh


    【解决方案1】:

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

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

    对于 2.) 您需要将内容放入布局中(例如 column)。在项目文档和图库中有很多这样的例子。

    【讨论】:

    • 谢谢。 p 是 function_to_call() 函数的本地函数,所以我应该在这个函数中返回 p 并在 curdoc().add_root(column(dropdown,p)) 中使用它
    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2021-04-08
    • 1970-01-01
    相关资源
    最近更新 更多