【发布时间】:2017-11-04 09:42:24
【问题描述】:
我已将用户指南的Embedding Bokeh Server as a Library 部分中的flask_embed.html 中的简单散景应用示例集成到我的烧瓶应用程序中,只是为了验证我可以正确设置集成到我的烧瓶应用程序所需的服务器基础架构,并且我可以成功地路由到它而没有任何阻碍。
我看不清楚的是如何摆脱散景应用程序和对使用罐装数据的modify_doc 全局函数的依赖之间的硬关联,该函数的签名必须是散景文档的单个参数.我想将数据从我的模型推送到一个函数中,然后 Bokeh 将使用该函数呈现文档。有一个警告可能会或可能无关紧要,但模型仅由用户在运行时填充,当他们加载由 Flask 应用程序和 Flask 会话维护的 csv 文件时。
作为一个最小的例子,我的烧瓶应用程序维护了一个模型实例,其中包含一个 pandas DataFrame,我希望创建一个 Bokeh 应用程序,我可以重用来绘制不同列对的散点图的数据框。这些对通过 Flask 创建的链接呈现给用户,这些链接当前指向具有通过 matplotlib 生成的静态图像的页面。这些图像是由一个函数创建的,该函数将用于生成文件名的列名和 x 和 y 坐标作为数据框的列。列名作为参数传递给烧瓶路由,这些路由会向下渗透到获取适当图像的模板。
基本上,我想以某种功能方式在 Bokeh 中的不同数据上重用相同的绘图逻辑,就像我对 Matplotlib 所做的那样。似乎FunctionHandler 技术固定在数据源上,因为我试图创建一个维护状态的类,该类实现了modify_doc 方法,但问题在于类中所需的self 参数。
class BokehParamPlot() :
def __init__( self , paramName , x , y ) :
# Initialize member data
self.paramName = paramName
self.x = x
self.y = y
def modify_doc( self , doc ) :
x = self.x
y = self.y
source = ColumnDataSource(data=dict(x=x, y=y))
plot = figure()
plot.line('x', 'y', source=source)
doc.add_root(column(slider, plot))
上述尝试的精神是尝试对FunctionHandler 技术进行参数化,因为应用程序将与不同的数据相同,并且我不想为我的数据框中的每一对数据创建一个应用程序.但是没有运气
File "ParamPlot.py", line 362, in <module>
bokeh_app = Application(FunctionHandler(BokehParamPlot.modify_doc))
File "C:\Anaconda3\lib\site-packages\bokeh\application\handlers\function.py", line 11, in __init__
_check_callback(func, ('doc',))
File "C:\Anaconda3\lib\site-packages\bokeh\util\callback_manager.py", line 32, in _check_callback
raise ValueError(error_msg % (", ".join(fargs), formatted_args))
ValueError: Callback functions must have signature func(doc), got func(self, doc)
查看 Bokeh 源代码,另一个有希望的路线是 CodeHandler,但我希望我正在尝试的不是一些遥远的用例,我只是错过了一些点或与 Base Python 或其他东西的一些连接这可能很快就会让我上路。
【问题讨论】: