Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript bokeh,回调中的更改数据不会更改原始python数据_Javascript_Python_Html_Data Visualization_Bokeh - Fatal编程技术网

Javascript bokeh,回调中的更改数据不会更改原始python数据

Javascript bokeh,回调中的更改数据不会更改原始python数据,javascript,python,html,data-visualization,bokeh,Javascript,Python,Html,Data Visualization,Bokeh,我正在开发一个用于手动分类的工具,它可以改变bokeh在散点图中选择的某些点(在我的例子中是颜色)的属性。我通过s.data=d2和s.change.emit()更改了回调中的源数据,但都失败了。我以为这样的操作会改变source.data,但当我打印source.data时,实际上什么都没有发生。 不过,绘图中的点的颜色会按预期发生变化。 这是我的相关代码: DF = pd.read_csv(csv_path) s = ColumnDataSource(DF_file) p = figure(

我正在开发一个用于手动分类的工具,它可以改变bokeh在散点图中选择的某些点(在我的例子中是颜色)的属性。我通过s.data=d2和s.change.emit()更改了回调中的源数据,但都失败了。我以为这样的操作会改变source.data,但当我打印source.data时,实际上什么都没有发生。 不过,绘图中的点的颜色会按预期发生变化。 这是我的相关代码:

DF = pd.read_csv(csv_path)
s = ColumnDataSource(DF_file)
p = figure(plot_width=500, plot_height=500, tooltips=TOOLTIPS,tools="lasso_select, tap", title="manual classification")
circles = p.circle('x', 'y', color='color', size=10, source=s, line_alpha=0.6,fill_alpha=0.6)
s.callback = CustomJS(args=dict(s1=s), code="""
    var inds = cb_obj.selected.indices;
    var d1 = s1.data;

    for (var i = 0; i < inds.length; i++) 
    {d1['color'][inds[i]] = 'green';} 

    s1.change.emit();
""")
DF=pd.read\u csv(csv\u路径)
s=ColumnDataSource(DF_文件)
p=图形(绘图宽度=500,绘图高度=500,工具提示=工具提示,工具=“套索选择,点击”,标题=“手动分类”)
圆=p.圆('x','y',color='color',size=10,source=s,line_alpha=0.6,fill_alpha=0.6)
s、 callback=CustomJS(args=dict(s1=s),code=“”
var inds=cb_obj.选定指数;
var d1=s1.1数据;
对于(变量i=0;i
打印(s.data)和从s.to_csv(xxx)保存的csv文件均未显示对原始输入数据的更改。
另外,我想知道当python中的数据是在
args=(s1=s)
中传递给它的数据时,回调如何改变绘图的数据,同时保持python中的数据不变

当Bokeh JS对象被实例化时,它使用Python对象作为数据源,但实际上与它们断开了连接——因此对JS模型的更新不会传播回它们的Python父对象

而本网页中的讨论也提出了一种解决方法,使用IPython.notebook.kernel.execute在Python中创建或覆盖变量。它只能用于笔记本电脑前端(我发现只有在代码中使用output_notebook()时,此解决方法才有效)

下面是我在python中更改原始数据的新代码:

s.callback = CustomJS(args=dict(s1=s1), code="""
    var inds = s1.selected.indices;
    var d1 = s1.data;

    for (var i = 0; i < inds.length; i++) 
    {
    d1['color'][inds[i]] = 'red';
    var index = inds[i];
    var command = "s1.data['color'][" + index + "] = red";
    var kernel = IPython.notebook.kernel;
    kernel.execute(command);
    } 

    s1.change.emit();;
""")
s.callback=CustomJS(args=dict(s1=s1),code=”“”
var inds=s1.选定指数;
var d1=s1.1数据;
对于(变量i=0;i
Bokeh可以在两种模式下运行。简单模式可创建具有交互性的独立网页。更复杂的模式需要运行后端服务器,允许在网页和后端之间发送命令。