散景-使用CustomJS更改vbar的最大值不会在JS函数外部传播

时间:2018-12-05 00:03:11

标签: python bokeh

我正在使用Pandas和Bokeh;我没有运行服务器,因此我通过CustomJS

使用JS回调

我设置了一个图形和一个单选按钮控件,以更改与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函数之外。

不确定如何修改它;因为每次我按下单选按钮小部件的按钮时,它都会重新加载原始值。

0 个答案:

没有答案