Я использую Панды и Боке;Я не запускаю сервер, поэтому я использую обратные вызовы JS через CustomJS
. Я настроил фигуру и переключатель, чтобы изменить данные, относящиеся к оси Y.Я написал код JS для обновления рисунка;Проблема в том, что даже при изменении значения top
в элементе vbar
график не изменится.
В большинстве примеров изменения выполняются для columndatasource
;хотя мой vbar загружает непосредственно поля, которые мне нужно отобразить;поэтому подход к изменению фрейма данных не будет работать
Предположим, что pandas dataframe
содержит имена, возраст и вес;это мой текущий набор данных.Идея состоит в том, чтобы переключаться между значениями для y
, чтобы я мог показать возраст или вес, оставив имя на оси X.
Это то, что я имею до сих пор;и это дает график;хотя это не изменит данные на Y
x_field = 'Name'
y_field = 'Age'
source = ColumnDataSource(pandas_df)
x_axis_field = source.data[x_field].tolist()
p=figure(plot_width=800, ploth_height=600, title="test", x_axis_label="names", y_axis_label="age", x_range=x_field)
p.xaxis.major_label_orientation = 0.78
myplot = p.vbar(top=y_field, x=x_field, width=0.5, source=source)
callback_radiobuttons = CustomJS(args=dict(source=source, y_axis=myplot.glyph.top), code="""
// JS code
var selected_button = cb_obj.active;
var data_set = source.data;
if (selected_button == 0) {
// choose age for the Y
y_axis="age";
}
if (selected_button == 1) {
// choose weight for the Y
y_axis="weight";
}
// update the plot
source.change.emit()
// END JS code
""")
radio_group = RadioButtonGroup(labels=["Age", "Weight"], active=0)
radio_group.js_on_change('active', callback_radiobuttons)
layout = row(widgetbox(radio_group), p)
show(layout)
Изменение кнопки не изменит значения, поскольку изменения, сделанные в y_axis
, не распространяются за пределы функции JS.
Не уверен, как вы это измените;потому что он перезагружает исходное значение каждый раз, когда я нажимаю на кнопку виджета радиокнопки.