2016-10-11 2 views
1

У меня есть панд DataFrame, похожий на тот, нижеPython Bokeh CustomJS для виджетов

import pandas as pd 
import numpy as np 
df = pd.DataFrame(columns=['item'], data=list(range(0,15))) 
df['crit'] = ['crit1','crit2','crit3']*5 
df['label'] = np.random.choice(['label1','label2','label3'], size=(15,1)) 
df.head() 

enter image description here

Я замышляет гистограмма с Bokeh

from bokeh.io import output_file, show, output_notebook 
from bokeh.charts import Bar 
from bokeh.layouts import layout 
from bokeh.models import ColumnDataSource 
from bokeh.models.widgets import CheckboxButtonGroup 

source = ColumnDataSource(df) 
p = Bar(df, label='label', values='item', agg='count', legend=None) 
checkbox = CheckboxButtonGroup(labels=["Opt1", "Opt2", "Opt3"], active=[0, 1]) 
grid = layout([[p], [checkbox]]) 
show(grid) 

enter image description here

Я хотел бы добавить настраиваемый JS-обратный вызов, который фильтрует и сортирует t он передаст данные для обновления сюжета. Например, нажав кнопку «Opt2», я хотел бы отфильтровать фреймворк, чтобы хранить строки только там, где крит == crit2, и я бы хотел, чтобы сортировка данных была отсортирована (чтобы бары в порядке убывания).

Я не знаком с JS, только Python - мой друг ... Это что-то легко достижимое? Может ли кто-нибудь посадить меня на трассу? Пример, который я нашел в документации bokeh, не соответствовал этому варианту использования.

ответ

1

Следуйте этой боке галереи пример (IMDB фильмы): https://demo.bokehplots.com/apps/movies

его код здесь: https://github.com/bokeh/bokeh/blob/master/examples/app/movies/main.py

Последняя часть делает именно то, что вы хотите, посмотрите в эту функцию:

def select_movies(): 
+0

Просто, чтобы быть педантично понятным о вещах, это обратный вызов python на сервере Bokeh, а не обратный вызов CustomJS, как упоминалось в вопросе. Но это невозможно, например, запустить код pandas в обратном вызове 'CustomJS', поэтому, если использование pandas является обязательным требованием, сервер Bokeh требуется в любом случае. – bigreddot