我正在使用Pandas和Bokeh;我没有运行服务器,因此我通过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函数之外。
不确定如何修改它;因为每次我按下单选按钮小部件的按钮时,它都会重新加载原始值。