如何在Bokeh Div中显示情节?

时间:2019-05-14 20:06:13

标签: bokeh

这是我的情节:

from bokeh.plotting import figure

plot = figure()
plot.circle([1,2], [3,4])

这是我的div:

myDiv = Div(text="<b>I want my plot to go in here!</b>", style={'color': 'blue'})

我希望能够运行以下代码来查看我的情节:

show(myDiv)

如何在我的div中获取图?

2 个答案:

答案 0 :(得分:1)

就像我在建议使用Tabs的评论中写的一样 另一种选择是构建一个Bokeh服务器应用程序,该应用程序将在布局中动态删除/添加绘图。

使用bokeh serve --show app.py在Terminal(Bokeh v1.1.0)中运行以下代码:

from bokeh.models import ColumnDataSource, Column, Select
from bokeh.plotting import curdoc, figure, Figure
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 2), columns = ['plot1', 'plot2'])
source = ColumnDataSource(df)

def callback(attr, old, new):
    if new == "plot1":
        layout.children.remove(p2)
        layout.children.append(p1)

    if new == "plot2":
        layout.children.remove(p1)
        layout.children.append(p2)

select = Select(value = "plot1", options = ["plot1", "plot2"])
select.on_change('value', callback)

layout = Column()
layout.children.append(select)

p1 = figure(title = 'plot1')
p1.line(source = source, x = 'index', y = 'plot1')
p2 = figure(title = 'plot2')
p2.line(source = source, x = 'index', y = 'plot2')

layout.children.append(p1)

curdoc().add_root(layout)

enter image description here

答案 1 :(得分:0)

要实现的目标可以轻松地通过为输入小部件分配一个CustomJS回调来完成。

创建诸如Column之类的布局对象,而不是创建div。将其连同5个图一起作为参数传递给回调(请参阅CustomJS文档)。

然后,您可以执行以下操作:

layout_model.child = your_chosen_plot
layout_model.change.emit()

这只会在隐藏其他图的同时显示所选图。您还可以单独访问每个标签的visible属性。