我一般都是Bokeh和Flask python的新手,但我已经设法创建了一个图表,然后通过烧瓶将其输出到我的浏览器上。唯一的问题是我没有得到我的图表旁边的“散景工具栏”。
我的代码看起来像这样
from flask import Flask, render_template, request
import pandas as pd
import csv
from bokeh.plotting import figure
from bokeh.io import show
from bokeh.embed import components
from bokeh.models import Range1d
from bokeh.resources import CDN
app = Flask(__name__)
# Create the main plot
def create_figure():
xvals = []
yvals = []
with open('test.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
xvalue = row[0]
yvalue = row[1]
xvals.append(xvalue)
yvals.append(yvalue)
p = figure(plot_width=400, plot_height=400, x_range=(0, 20))
p.y_range = Range1d(0, 15)
p.circle(xvals, yvals, size=10)
return p
# Index page
@app.route('/')
def index():
plot = create_figure()
script, div = components(plot)
cdn_js = CDN.js_files[0]
cdn_css = CDN.css_files[0]
return render_template("index.html", script=script, div=div,
cdn_js=cdn_js,
cdn_css=cdn_css)
# With debug=True, Flask server will auto-reload
# when there are code changes
if __name__ == '__main__':
app.run(port=5000, debug=True)
我的index.html代码如下所示:
<html>
<head>
<link href={{ cdn_css|safe }} type="text/css" />
<script type="text/javascript" src={{ cdn_js|safe }}></script>
</head>
<body>
<H1>First</H1>
{{ script|safe }}
{{ div|safe }}
</body>
</html>
我错过了什么吗?当我将图形输出到output_file时,我得到工具栏。任何帮助,将不胜感激。
答案 0 :(得分:2)
这很可能就是https://github.com/bokeh/bokeh/issues/7497问题。可用的解决方法as I posted in the thread如下:
有两种选择。如果要将工具栏保留为绘图的一部分,则必须手动创建
ToolbarPanel
并将其与add_layout()
一起添加到绘图中。或者,您可以将一个工具栏与绘图分离,作为更大布局的元素,就像网格图一样。在这两种情况下,关键是设置plot.toolbar_location = None
,以禁用默认ToolbarPanel
的创建。
请关注此问题,以便了解未来的发展。
答案 1 :(得分:1)
我有同样的问题。我无法解释原因,但是此示例有效:realpython github