Я новичок в Bokeh и пытаюсь выполнить, казалось бы, простую задачу.Я хочу построить окружности координат x, y населенных пунктов в df
вместе с виджетом Select
, позволяющим пользователю фильтровать по df['OwnerName']
.
Образец df
:
LocalityName OwnerName MatureFemaleLice x y
0 NORD LEKSA AUSS 0.01 1.047429e+06 9.246246e+06
1 KJELNESET MHG 0.00 1.267795e+06 9.515210e+06
2 DÅVØYA AUSS 0.05 2.153038e+06 1.109226e+07
3 OLANESET GSF 0.02 2.480031e+06 1.113814e+07
4 RAKKENES MHG 0.01 2.418971e+06 1.103141e+07
Я считаю, что должен использовать функцию обратного вызова, но не уверен, как это лучше всего сделать.Код, который у меня есть:
source = ColumnDataSource(df)
# web mercator coordinates
Norway = x_range, y_range = ((1e5, 32e5), (80e5, 115e5))
# Customize hover tool
hover = HoverTool(
tooltips = [
('Locality', '@LocalityName'),
('MatureFemaleLice', '@MatureFemaleLice')
])
# Create plot
p = figure(width=800, height=800,
tools=['pan', 'wheel_zoom', hover],
toolbar_location = 'above',
x_range=x_range,
y_range=y_range,
x_axis_type="mercator",
y_axis_type="mercator")
# Add map tile
p.add_tile(CARTODBPOSITRON_RETINA)
# Add circle on plot for localities
p.circle(x='x', y='y', size=10, source=source, fill_alpha = 0.5)
# Create widget for selecting owner filter
select = Select(title='Owner', value='OwnerName',
options=df.OwnerName.unique().tolist())
def select_callback(attr, old, new):
# NEED HELP TO WRITE THIS PART
# IS THIS RIGHT?
select.on_change('value', select_callback)
# Add figure and widget to the document
curdoc().add_root(column(select, p))
Я подумал, что один из способов сделать это, кажется, будет в порядке:
def select_callback(attr, old, new):
selected = select.value
if selected == 'Include all':
new_data = df
else:
new_data =df[df.OwnerName == selected]
source.data = ColumnDataSource(new_data).data
select.on_change('value', select_callback)