bokeh накладывает несколько объектов графика на GridPlot

Скажем, у меня есть класс, который содержит некоторые данные и реализует функцию, которая возвращает график боке

import bokeh.plotting as bk
class Data():
    def plot(self,**kwargs):
        # do something to retrieve data
        return bk.line(**kwargs)

Теперь я могу создать несколько таких объектов данных, как exps а также sets и создавать отдельные участки. Если bk.hold() установлено, они будут, в конечном итоге в одной фигуре (что в основном то, что я хочу).

bk.output_notebook()
bk.figure()
bk.hold()
exps.scatter(arg1)
sets.plot(arg2)
bk.show()

Теперь я хочу объединить эти участки в GridPlot() Я могу сделать это для не наложенных одиночных участков

bk.figure()
bk.hold(False)
g=bk.GridPlot(children=[[sets.plot(arg3),sets.plot(arg4)]])
bk.show(g)

но я не знаю, как я могу наложить графики рассеяния, которые у меня были ранее, как exps.scatter.

Есть ли способ получить ссылку на текущую активную фигуру, например:

rows=[]
exps.scatter(arg1)
sets.plot(arg2)
af = bk.get_reference_to_figure()
rows.append(af) # append the active figure to rows list
bg.figure()     # reset figure

gp = bk.GridPlot(children=[rows])
bk.show(gp)

2 ответа

Решение

По состоянию на боке 0,7 plotting.py интерфейс был изменен, чтобы быть более явным, и, надеюсь, это сделает такие вещи проще и понятнее. Основное изменение заключается в том, что figure теперь возвращает объект, так что вы можете просто напрямую воздействовать на эти объекты, не задаваясь вопросом, что такое "текущий активный" график:

p1 = figure(...)
p1.line(...)
p1.circle(...)

p2 = figure(...)
p2.rect(...)

gp = gridplot([p1, p2])
show(gp)

Почти весь предыдущий код должен работать на данный момент, но hold, curplot и т.д. устарели (и выдают предупреждения об устаревании, если вы запускаете python с включенными предупреждениями об устаревании) и будут удалены в следующем выпуске.

Ок видимо bk.curplot() делает трюк

exps.scatter(arg1)
sets.plot(arg2)
p1 = bk.curplot()
bg.figure()     # reset figure
exps.scatter(arg3)
sets.plot(arg4)
p2 = bk.curplot()
gp = bk.GridPlot(children=[[p1,p2])
bk.show(gp)
Другие вопросы по тегам