gpt4 book ai didi

python - Bokeh 0.12.14 + flask : Broken library or new syntax for AjaxDataSource?

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:45 25 4
gpt4 key购买 nike

安装最新的 Bokeh 库 (0.12.14) 后,我发现了一个奇怪的行为。

在以下示例中,根据 Ajax 请求随机创建一组 180 个值,并每秒进行可视化。

版本 0.12.13 运行完美,但 0.12.14 生成 JS 错误:

bokeh-0.12.14.min.js:1 undefined http://0.0.0.0:5011/undefined 404 (NOT FOUND)

如您所见,端点是 http://0.0.0.0:5011/undefined 而不是 http://0.0.0.0:5011/data。直接调用时,http://0.0.0.0:5011/data 就在那里并返回 JSON 数据。看起来 Ajax 端点已丢失。 这是库中的错误还是记录的语法更改?

如果您想使用它,不要忘记更改 BOKEH_VERSION 中的版本:

# -*- coding: utf-8 -*-

from flask import Flask, jsonify, render_template_string

from bokeh.embed import components
from bokeh.models.sources import AjaxDataSource
from bokeh.plotting import figure

import pandas as pd
import numpy as np

#########################
BOKEH_VERSION = "0.12.13" # <--- DON'T FORGET TO CHANGE HERE IF USING ANOTHER VERSION
#########################

html_template="""
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
<link href="http://cdn.bokeh.org/bokeh/release/bokeh-{bokeh_ver}.min.css" rel="stylesheet" type="text/css">
<script src="http://cdn.bokeh.org/bokeh/release/bokeh-{bokeh_ver}.min.js"></script>
</head>
""".format(bokeh_ver=BOKEH_VERSION)

html_template += """
<body>
<h1>Working in Bokeh 0.12.13<br>and not working in 0.12.14</h1>
<div id="example_plot"></div>

{{ plot_div.plot_grid | safe}}
{{ plot_script | safe}}

</body>
</html>
"""

# ------------------------------------------------------------------------------

app = Flask(__name__)

# ------------------------------------------------------------------------------

class ExamplePlot:

def __init__(self, app):

self._data_source = None
self.data_source_update() # create the first set of dummy data for self.data_source

self._ajax_data_source = AjaxDataSource(
data_url="/data",
data=self._data_source,
polling_interval = 1000,
)

self.figure = figure()

self.figure.line(
source=self._ajax_data_source,
x="index",
y="value",
)

def data_source_update(self):
self._data_source = {
"index": range(180),
"value": list(np.random.randint(1,100,size=180))
}

# ------------------------------------------------------------------------------

example_plot = ExamplePlot(app)

@app.route("/")
def main_page():

script, div = components({'plot_grid': example_plot.figure})

html = render_template_string(
html_template,
plot_script = script,
plot_div = div,
)
return html


@app.route("/data", methods=['GET', 'OPTIONS', 'POST'])
def serve():
example_plot.data_source_update()

return jsonify(
index=example_plot._data_source["index"],
value=example_plot._data_source["value"],
)


if __name__ == '__main__':
app.run(host="0.0.0.0", port=5011)

最佳答案

这绝对是一个错误。最近对如何处理选择进行了重构,并且错过了对 AjaxDataSource 的必要更新。它将被修复为 0.12.15

关于python - Bokeh 0.12.14 + flask : Broken library or new syntax for AjaxDataSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48747524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com