2015-12-15 4 views
1

Я использую bokeh в ноутбуке ipython и хотел бы иметь кнопку рядом с графиком для включения или выключения меток точек данных. Я нашел решения с помощью IPython.html.widgets.interact, но это решение сбрасывает график для каждого обновления, включая масштабирование и дополнениеОбновить метки точек данных на участке bokeh

Это минимальный рабочий пример кода:

from numpy.random import random 
from bokeh.plotting import figure, show, output_notebook 
from IPython.html.widgets import interact 

def plot(label_flag): 
    p = figure() 
    N = 10 
    x = random(N)+2 
    y = random(N)+2 
    labels = range(N) 
    p.scatter(x, y) 
    if label_flag: 
     pass 
     p.text(x, y, labels) 

    output_notebook() 
    show(p) 

interact(plot, label_flag=True) 

P.S. Если есть простой способ сделать это в matplotlib, я тоже снова вернусь.

ответ

1

Используя bokeh.models.ColumnDataSource, чтобы сохранить и изменить данные участка, я смог достичь того, что хотел.

Одно из предостережений заключается в том, что я не нашел способа заставить его работать без обновления без вызова output_notebook дважды в двух разных ячейках. Если я удалю один из двух вызовов output_notebook, gui из tools -button выглядит наружу или изменение настройки также приводит к сбросу графика.

from numpy.random import random 
from bokeh.plotting import figure, show, output_notebook 
from IPython.html.widgets import interact 
from bokeh.models import ColumnDataSource 
output_notebook() 

## <-- new cell --> 

p = figure() 

N = 10 
x_data = random(N)+2 
y_data = random(N)+2 
labels = range(N) 
source = ColumnDataSource(
    data={ 
     'x':x_data, 
     'y':y_data, 
     'desc':labels 
    } 
) 
p.scatter('x', 'y', source=source) 
p.text('x', 'y', 'desc', source=source) 
output_notebook() 

def update_plot(label_flag=True): 
    if label_flag: 
     source.data['desc'] = range(N) 
    else: 
     source.data['desc'] = ['']*N 
    show(p) 

interact(update_plot, label_flag=True) 
+0

double output_notebook() необходимо из-за этого: https://github.com/bokeh/bokeh/issues/2024 – Framester

Смежные вопросы