Я пытаюсь создать интерактивный сюжет в блокноте Jupyter. Я хочу иметь возможность выбрать несколько вариантов одновременно, но пока я могу выбрать только один вариант за раз. Например, я могу фильтровать только по группе «А», «В» или «С». Может ли кто-нибудь помочь мне изменить это так, чтобы я мог выбрать группу «A» и «B» одновременно.
Я пытался использовать опцию MultiSelect из bokeh.models.widgets, но я невозможность интерактивного обновления графика с моим выбором.
import pandas as pd
import numpy as np
import bokeh
from bokeh.plotting import figure, show
from bokeh.io import output_notebook, push_notebook, output_file, save
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn, MultiSelect
from ipywidgets import interact
np.random.seed(1)
x = np.random.randint(low = 1, high = 50, size = 25)
y = [10, 10, 10, 10, 10, 10, 5,5,5,5,5,5,20,20,20,20,20,20,20,25,25,25,25,25,25]
gr = ['A','B','C','D','E','A','B','C','D','E','A','B','C','D','E','A','B','C','D','E','A','B','C','D','E']
df = pd.DataFrame()
df['x'] = x
df['y'] = y
df['gr'] = gr
def update(grp):
new_data = df.loc[df.gr == grp, :]
ggp = new_data.groupby(['y']).size().to_frame()
ggp.columns = ['cnt']
source1 = ColumnDataSource(ggp)
source.data = source1.data
push_notebook()
gdf = df.groupby(['y']).size().to_frame()
gdf.columns = ['cnt']
hover = HoverTool(
tooltips=[
( 'y', '@y' ),
( 'count', '@{cnt}{0.2f}' )])
source = ColumnDataSource(gdf)
p1 = figure(plot_width=600, plot_height=300, title="counts",
tools="pan,wheel_zoom,box_zoom,reset, save")
p1.vbar(x='y', top = 'cnt', width=0.5, source = source)
p1.add_tools(hover)
output_notebook()
from bokeh.layouts import column
show(p1, notebook_handle = True)
interact(update, grp = df.gr.unique())