Если вы хотите взаимодействия, вам нужно либо указать обратные вызовы в java с помощью обратных вызовов js_ *, либо, как в моем примере ниже, использовать чистые обратные вызовы python, но они не будут работать в обычном браузере без их размещения. на сервере боке, поскольку обычный html не поддерживает python. Я был именно там, где вы сейчас, см. Свой вопрос ( Экспорт интерактивных графиков Боке с виджетами в автономные HTML) и ответ.
Чтобы увидеть, как это работает, я используйте блокнот Jupyter для запуска кода и разработки взаимодействий. Я обнаружил, что это самый удобный способ создания приложений с эффектом боке, но вы также можете использовать его.
Чтобы заставить его работать в блокноте jupyter:
from bokeh.io import output_notebook
output_notebook()
Вам понадобится чтобы обернуть ваш код в одну функцию, которую вы затем передаете в FunctionHandler, а затем в функцию Application, которую вы затем можете показать.
df1 = pd.read_csv('total-residents-aged-15-years-and-over-by-age-group.csv',na_values =["na"])
rows_to_keep = ["65 Years & Over"]
rows_to_keep2 = ["Total Residents In The Labour Force", "Total Residents Outside The Labour Force"]
df2 = df1[df1['level_2'].isin(rows_to_keep)]
df3 = df2[df2["level_1"].isin(rows_to_keep2)]
df4 = df3.groupby(['year', 'level_1', ]).sum()
df5 = df4.reset_index(drop=False)
def viz(doc):
def update(attr,old,new):
df6 = grabData(new)
src.data.update(ColumnDataSource(df6).data)
def grabData(year):
df6 = df5[df5["year"] == year]
df6['angle'] = df6['value']/df6['value'].sum() * 2*pi
df6['angle1'] = [0,df6['angle'].iloc[0]]
df6['angle2'] = [df6['angle'].iloc[0],2*pi]
df6['color'] = ["purple","blue"]
return df6
df6 = grabData(2001)
src = ColumnDataSource(df6)
p = figure(plot_height=350, title="Pie Chart", toolbar_location=None,
tools="hover", tooltips="@level_1: @value",x_range=(-0.5, 1.0))
p.wedge(source=src,x=0, y=1, radius=0.4,
start_angle= 'angle1', end_angle='angle2',
line_color="white", fill_color='color')
slider = Slider(start=1990, end=2019, value=2001, step=1, title="Year")
slider.on_change('value',update)
doc.add_root(column(p,slider))
show(Application(FunctionHandler(viz)))