如何一次显示两个Bokeh对象?

时间:2018-09-12 05:22:35

标签: python bokeh

我正在尝试将Bokeh vbar与RangeTool一起使用。我尝试了许多不同的代码行,但这仍然无法正常工作。我不了解“浏览器”的错误

同一代码可用于行或散点

这是错误:

  

TypeError:“ Figure”类型的参数不可迭代

这是下面的代码:

private func update1to2(_ migration: Migration) {
    migration.enumerateObjects(ofType: Report.className(), {oldObject, newObject in
        let userId = oldObject!["userId"] as! String
        newObject?["fullname"] = getFullnameFromPerson(migration, userId)
    })
}

有关错误的更多信息:

from bokeh.io import show
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, RangeTool
from bokeh.plotting import figure
from bokeh.models import Range1d

x = [1,2,3,4,5,6,7,8]
wdth = [0.5 for x in range(0,8)]
top = [8,7,6,5,4,3,2,1]

sourceRT5 = ColumnDataSource(data=dict(x=x, width=wdth, top=top))
p = figure(plot_height=300, plot_width=800, 
           tools="", toolbar_location=None,
           x_axis_type="linear")


p.vbar('x', 'width', 'top', bottom=0, line_color='dodgerblue', 
       fill_color="dodgerblue", legend='New Words',
        source=sourceRT5)

p.yaxis.axis_label = 'Price'

select = figure(plot_height=50, plot_width=800, y_range=(0,10),
                x_axis_type="linear",  y_axis_type=None,
                tools="", toolbar_location=None)

range_rool = RangeTool(x_range=Range1d(3,8))
range_rool.overlay.fill_color = "navy"
range_rool.overlay.fill_alpha = 0.2

select.vbar('x', 'width', 'top', source=sourceRT5)
select.ygrid.grid_line_color = None
select.add_tools(range_rool)
select.toolbar.active_multi = range_rool

show(p,select)

1 个答案:

答案 0 :(得分:2)

您似乎正在尝试显示多个数字。 show包含一个应显示的对象,第二个参数是应用于哪个浏览器(例如,firefox,chrome,IE,vivaldi等)。当您编写该文件时,我认为它并没有抛出错误,但是实际上并没有起作用。

散景有一些documentation on displaying multiple plots。简短版本是您需要告诉它应该以哪种方式对其进行布局。一个非常通用的功能是layout

from bokeh.layouts import layout
... # your code without show(...)
show(layout([p,select]))