【发布时间】:2019-03-22 13:49:30
【问题描述】:
如果这个问题在 StackOverflow 上的其他地方得到解答,我深表歉意,在发布这个问题之前,我已尽力搜索答案。
我正在努力使用 Bokeh 创建一个基于 Flask 的 Web 应用程序,以便在工作中进行数据可视化。使用 bokeh.embed.components 和 bokeh.plotting.figure 嵌入散点图/线图没有问题。
我想在绘图下方的 DataTable 小部件中显示用于制作绘图的数据。不幸的是,使用组件生成脚本和 div 似乎不适用于小部件。使用通过 bokeh.layouts 创建的列、行或布局时,组件似乎也会失败。
我的代码的总体布局是一个 Python 文件,其中包含我的 Flask 应用程序,以及一个包含我的网页布局的 HTML 文件。 Python文件的大体布局如下:
from flask import Flask, render_template
import pandas as pd
import numpy as np
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, TableColumn
from bokeh.plotting import figure
from bokeh.layouts import widgetbox, column
from bokeh.embed import components
app = Flask(__name__)
x = np.linspace(0, 2, 1000)
y = np.sin(x)
df = pd.DataFrame({"x": x, "y":y}) # Not sure how to provide sample data
@app.route("/")
def index():
p = figure()
p.scatter(df['x'], df['y'])
data_source = ColumnDataSource(df)
columns = [
TableColumn(field="field1", title="Field 1"),
TableColumn(field="field2", title="Field 2"),
TableColumn(field="field3", title="Field 3"),
]
data_table = DataTable(source=data_source, columns=columns)
script, div = components(column(p, widgetbox(data_table)))
return render_template('sample.html', script=script, div=div)
HTML 模板(“sample.html”)如下所示:
<html>
<head>
<link
href="http://cdn.bokeh.org/bokeh/release/bokeh-1.0.4.min.css"
rel="stylesheet" type="text/css">
<link
href="http://cdn.bokeh.org/bokeh/release/bokeh-widgets-1.0.4.min.css"
rel="stylesheet" type="text/css">
<script src="http://cdn.bokeh.org/bokeh/release/bokeh-1.0.4.min.js"></script>
<script src="http://cdn.bokeh.org/bokeh/release/bokeh-widgets-1.0.4.min.js"></script>
</head>
<body>
{{ script|safe }}
{{ div|safe }}
</body>
</html>
我选择使用简单的正弦波作为此代码的示例数据,但在现实生活中,我使用 Excel 文件 (pd.read_excel) 在将 Web 应用程序连接到数据库之前测试代码。
在 Python 代码中,如果我替换
script, div = components(column(p, widgetbox(data_table))
与
script, div = components(p)
代码完美运行。所以,这让我相信问题在于嵌入小部件或绘图和小部件的布局。提前感谢您提供的任何帮助。
【问题讨论】:
-
没有minimal reproducible example,我不清楚任何类型的答案应该是什么样子
-
我可以尝试提供这样一个例子。我应该发一个新帖子还是只在这个评论部分提供?
-
“保留发布工作代码” - 我怀疑源的内容是否足以揭示代码的敏感机制。您是否能够专注于单行代码或有问题的功能块?我确信发布这些内容中的任何一个都不会泄露代码的复杂性。
-
两者都不是。您可以edit您的问题提供minimal reproducible example
-
好的,我目前正在编辑,应该很快就会完成。对不起那些犯错的人