为什么我在bokeh应用程序服务器中看不到情节?

时间:2018-07-16 11:16:55

标签: python bokeh dashboard

我正在学习bokeh,正在申请。我使用文档bokeh serve --show app中给出的架构运行目录,代码成功运行,并且按预期显示了模板和CSS的呈现,但是没有看到要生成的图。

https://github.com/bokeh/bokeh/blob/master/examples/app/weather/main.py

我遵循了这个步骤,并且还查看了建议使用curdoc()的Stackoverflow,但仍然看不到该图。我正在使用Python 3.6和Bokeh 0.13.0 Firefox 61.0和OS Ubuntu

这是我的main.py完整代码

from bokeh.plotting import figure
from bokeh.io import curdoc
from bokeh.layouts import row

p = figure(title='One sample graph',
            plot_width=700,
            plot_height=700,
            toolbar_location=None)

p.circle([1,2,3,4,5],[6,7,2,5,4], size=15)

curdoc().add_root(row(p))

我还看着终端,看那里是否有任何错误。它也没有任何错误,当我查看HTML服务器的源代码时,没有看到用于生成绘图的代码。我想念什么吗?请帮忙。

编辑1:

我也看了下面的教程。该应用程序没有任何模板和CSS,也无法解决我的问题。

https://towardsdatascience.com/data-visualization-with-bokeh-in-python-part-iii-a-complete-dashboard-dc6a86aa6e23

编辑2:这是终端的输出窗口。 enter image description here

这是我只运行bokeh serve --show main.py时的输出。在这种情况下,我只看到图并丢失了模板和CSS信息。我还下载了Chrome浏览器,以查看浏览器是否存在问题,但事实并非如此。

enter image description here

我在代码中缺少什么吗?在gitter上,我还被告知要使用server_document(),该语句应放在我的文档中的什么位置,以便正确呈现所有内容?

1 个答案:

答案 0 :(得分:0)

在运行bokeh serve --show appdir时,显示templates/index.html,但是原始模板没有包含对embed的任何调用以指定应将绘图移至何处,因此未显示任何绘图。有必要在模板中调用embed,以便Bokeh知道将图放置在哪里。在embed中使用index.html的更新模板如下所示:

main.py:

from bokeh.plotting import figure
from bokeh.io import curdoc
from bokeh.layouts import row 

p = figure(title='One sample graph',
            plot_width=700,
            plot_height=700,
            toolbar_location=None)

p.circle([1,2,3,4,5],[6,7,2,5,4], size=15)

curdoc().add_root(row(p, name='plotrow'))

templates / index.html:

{% extends base %}
{% block preamble %}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet">
<link rel="stylesheet" href="app/static/special.css">
{% endblock %}
{% block contents %}
<title>Dashboard</title>
<div class="background">
<div class="header">
<h1>Text</h1>
<h2>Some more text</h2>
<p>Even more text</p>
</div>
<div class="bar"></div>
<div class="container">{{ embed(roots.plotrow) }}</div>
<div class="footer">
<p>Some extra text <br/>By someone</p>
</div>
</div>
{% endblock %}