我将 Bokeh Figure 实例作为输入传递给另一个函数,我需要在那里修改它的源。
想不通怎么办!
这就是我创建图形实例的方式:
source = ColumnDataSource({'x': [1,2,3], 'y': [2,4,6]})
p = figure(tools='pan,wheel_zoom,save,reset', name='p', toolbar_location='above')
p.circle('x', 'y', source=source, color='slategray', alpha=0.6, name='glyph')
Run Code Online (Sandbox Code Playgroud)
获取此数字的函数应如下所示:
def modify_source(fig):
fig.source.data['x'] = [6,7,8]
return fig
Run Code Online (Sandbox Code Playgroud)
该data_source是字形渲染器的属性:
circle = p.circle('x', 'y', source=source, color='slategray', alpha=0.6, name='glyph')
print(circle.data_source)
Run Code Online (Sandbox Code Playgroud)
您传递给的 JSON 数据可以通过ColumnDataSoource以下方式访问:
print(circle.data_source.data)
Run Code Online (Sandbox Code Playgroud)
一般来说,对于给定的情节:
plot = figure()
line = plot.line('x', 'y', source = source)
circle = plot.circle('x', 'y', source = source)
for renderer in plot.renderers:
if hasattr(renderer, 'glyph'):
print (renderer.data_source.data)
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下,你可以这样做:
def modify_source(circle):
circle.data_source.data['x'] = [6,7,8]
circle.data_source.change.emit() # for changes to take effect
return circle
Run Code Online (Sandbox Code Playgroud)