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)