У меня есть длина и вес нескольких экземпляров многих видов бабочек (common_name), и я хотел бы создать динамический график в Боке, где пользователь может выбрать данный вид, чтобы отобразить диаграмму рассеяния длин и весов. Фрейм данных представляет собой простой фрейм данных с 4 столбцами с 4 переменными: length
, weight
, common_name
и size
. Есть сотни записей (т.е. каждый образец имеет общее имя, длину и вес). Размер всегда равен 10, поэтому я могу установить 0 в обратном вызове. Упрощенная версия моего кода выглядит так:
def scatter_plot(request):
butterfly_data = pd.DataFrame(butterfly_data)
source = ColumnDataSource( butterfly_data)
### Main plot
plot = figure(title='Length-weight relationship', x_axis_label='length (cm)', y_axis_label='weight (g)',
tools="pan, hover, box_zoom, reset, save", toolbar_location="below",
plot_width=400, plot_height=400)
plot.circle(x='length', y='weight', source=source, line_width=2)
# List of species
available_species = list(set(butterfly_data['common_name']))
available_species.sort()
# Species selection widget
callback99 = CustomJS(args=dict(source=source), code="""
var data = source.data;
var inpt = cb_obj.active;
var size = data['size'];
var common_name = data['common_name'];
for (var i = 0; i < size.length; i++) {
var ret = [];
for (var a = 0; a < inpt.length; a++) {
for (var z = 0; z < common_name[i].length; z++) {
console.log("ret", common_name, ret, common_name[i], "s", inpt[a], size.length);
}
}
if (ret.length == 0) {
size[i] = 0;
} else {
size[i] = 10;
}
}
source.change.emit();
""")
species_selection = CheckboxGroup(labels=available_species, active = [])
species_selection.js_on_change('active', callback99)
# Set up widgets layout
widgets_layout = column(species_selection)
# Set up figures layout
figures_layout = row(plot)
# Set up page layout
page_layout = row(widgets_layout, figures_layout)
script, div = components(page_layout)
return render_to_response('scatter.html', {'script':script, 'div':div})
Моя проблема в том, что я не могу обновить график рассеяния (ничего не происходит, когда я выбираю данный вид). Должно быть, я перезвонил.
Есть идеи?