用于小部件的Python Bokeh CustomJS

时间:2016-10-11 18:00:42

标签: javascript python pandas charts bokeh

我有一个类似于下面的pandas DataFrame

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回调,对数据帧进行过滤和排序以更新绘图。例如,点击按钮' Opt2'我想过滤数据帧只保留行= crit == crit2,我希望对数据帧进行排序(使条形按降序排列)。

我不熟悉JS,只有Python是我的朋友......这是否容易实现?有人会把我放在赛道上吗?我在散景文档中找到的示例与此用例不对应。

1 个答案:

答案 0 :(得分:1)

关注此散景库示例(IMDB电影): https://demo.bokehplots.com/apps/movies

它的代码在这里: https://github.com/bokeh/bokeh/blob/master/examples/app/movies/main.py

最后一部分完全符合您的要求,请查看此功能:

// Tell Gradle to add Vaadin support
plugins {
id 'fi.jasoft.plugin.vaadin' version '1.0'
// Tell Gradle that we are working in eclipse
apply plugin: 'eclipse-wtp'
}