我想将bokeh文档序列化为JSON,使用DaggerAppCompatActivity
和from_json
[3]再次加载并提供它。
但是,大多数示例还是通过修改from_json_string
[1]或通过创建接收和修改文档的应用程序[2]来创建服务器。
我正在使用全息视图生成图的事实不应更改问题,因此无论如何这都不是全息视图问题;)。
curdoc
现在,我想创建类似以下内容的文件:
import pandas as pd
import holoviews as hv
from bokeh.document import Document
from bokeh.io.doc import curdoc, set_curdoc
import json
hv.extension('matplotlib')
hv.extension('bokeh')
print("- create dummy data")
df = pd.DataFrame(dict(x=[1, 2], y=[0, 1]))
print(df)
print("- plot as holoviews curve")
curve = hv.Curve(df, 'x', 'y', label='curve1').opts(ylabel='y')
print("- render in bokeh")
plot = hv.render(curve, backend='bokeh')
print("- serialize as bokeh document to JSON")
doc = Document()
doc.add_root(plot)
doc_json = doc.to_json()
json_string = json.dumps(doc_json)
print("- deserialize as bokeh document")
doc2 = Document.from_json_string(json_string)
print(doc2.roots[0])
这确实可以运行,但是在我的浏览器中什么也没有显示。原因是该应用程序实际上需要print("- embed document in bokeh application")
from bokeh.application.application import Application
app = Application()
app.initialize_document(doc)
print("- start bokeh server")
from bokeh.server.server import Server
server = Server(
{'/fubar':app}, # list of Bokeh applications
port=5010,
num_procs=1
)
print("- starting server on 'http://localhost:5010/fubar'")
server.start()
server.io_loop.start()
而不是Handler
。但是我没有找到有关如何将它们相互翻译的文档。
Tl; Dr我如何配置bokeh服务器以处理反序列化的文档?
[1] https://bokeh.pydata.org/en/latest/docs/user_guide/server.html
[2] https://bokeh.pydata.org/en/latest/docs/reference/application/handlers/function.html
[3] https://bokeh.pydata.org/en/latest/docs/reference/document.html
答案 0 :(得分:0)
感谢Bryan Van de Ven,我终于明白了。诀窍是改用replace_with_json
!
import pandas as pd
import holoviews as hv
from bokeh.document import Document
from bokeh.io.doc import curdoc, set_curdoc
import json
hv.extension('matplotlib')
hv.extension('bokeh')
print("- create dummy data")
df = pd.DataFrame(dict(x=[1, 2], y=[0, 1]))
print(df)
print("- plot as holoviews curve")
curve = hv.Curve(df, 'x', 'y', label='curve1').opts(ylabel='y')
print("- render in bokeh")
plot = hv.render(curve, backend='bokeh')
print("- serialize as bokeh document to JSON")
doc = Document()
doc.add_root(plot)
doc_json = doc.to_json()
json_string = json.dumps(doc_json)
print("- deserialize as bokeh document")
curdoc().replace_with_json(json.loads(json_string))
不幸的是,这不适用于用holoviews创建的动态内容。在更复杂的示例中,仅保留了静态内容。看来,在这些情况下,除了在服务器上真正执行分析之外,实际上没有其他方法。