Как обновить сюжет Bokeh несколько раз? - PullRequest
0 голосов
/ 28 сентября 2018

Я хотел бы итеративно добавлять линии на график и изменять цвет ранее нанесенных линий.Например, выделить только самый последний.Однако следующее не может обновить все цвета, кроме самой первой строки:

from bokeh.plotting import *
from bokeh.io import push_notebook

fig=figure()
h=show(fig, notebook_handle=True)

ps=[fig.line([1,2],[i,i], color="black") for i in range(3)]

for p in ps:
    p.glyph.line_color="red"
    push_notebook(h)

Это сработает, только если я сделаю один push_notebook(), однако я хотел бы использовать несколько обновлений, так как мои вычисленияработает.

Как я могу сделать эту работу?

РЕДАКТИРОВАТЬ: фактическое использование может быть ближе к этому:

from bokeh.plotting import *
from bokeh.io import push_notebook

output_notebook()

fig=figure()
h=show(fig, notebook_handle=True)  # start plot and "slow" computation to watch

ps=[]

for i in range(3):
    p=fig.line([1,2],[i,i], line_width=2, color="red")  # new line in red
    if ps:
        ps[-1].glyph.line_color="black"   # old lines in black -> this is not happening
    ps.append(p)
    push_notebook(h)

1 Ответ

0 голосов
/ 28 сентября 2018

Вы должны позвонить show после того, как все добавлено:

fig=figure()

ps=[fig.line([1,2],[i,i], line_width=2, color="black") for i in range(3)]

# call show after lines are already added to figure
h=show(fig, notebook_handle=True)

for p in ps:
    p.glyph.line_color="red"
    push_notebook(h)

Возможно, это можно считать ошибкой, я не уверен.Но это текущее поведение, с которым нужно бороться, в любом случае:

enter image description here

Если вы хотите что-то, что не имеет ограничений push_notebook,Вы могли бы рассмотреть встраивание реального приложения Bokeh в ноутбук

...