在下面的示例中,我试图获取当将散景图点按以附加到其各自列表中的数据字典coordList时,在图旁边的Div中显示的x和y坐标。
import numpy as np
from bokeh.io import show, output_notebook
from bokeh.plotting import figure
from bokeh.models import CustomJS, Div
from bokeh.layouts import column, row
from bokeh.events import Tap
coordList = dict(x=[], y=[])
output_notebook()
def display_event(div, attributes=[], style = 'float:left;clear:left;font_size=10pt'):
"Build a suitable CustomJS to display the current event in the div model."
return CustomJS(args=dict(div=div), code="""
var attrs = %s; var args = [];
for (var i = 0; i<attrs.length; i++) {
args.push(Number(cb_obj[attrs[i]]).toFixed(2));
}
var line = "<span style=%r>(" + args.join(", ") + ")</span>\\n";
var text = div.text.concat(line);
var lines = text.split("\\n")
if (lines.length > 35)
lines.shift();
div.text = lines.join("\\n");
""" % (attributes, style))
x = np.random.random(size=4000) * 100
y = np.random.random(size=4000) * 100
radii = np.random.random(size=4000) * 1.5
colors = ["#%02x%02x%02x" % (int(r), int(g), 150) for r, g in zip(50+2*x, 30+2*y)]
p = figure(tools="pan,wheel_zoom,zoom_in,zoom_out,reset")
p.scatter(x, y, radius=np.random.random(size=4000) * 1.5,
fill_color=colors, fill_alpha=0.6, line_color=None)
div = Div(width=400, height=p.plot_height)
layout = row(p, div)
point_attributes = ['x', 'y']
p.js_on_event(Tap, display_event(div, attributes=point_attributes))
show(layout)
我不确定如何保存坐标以及如何访问坐标并将其附加到列表中。
答案 0 :(得分:0)
无法使用上述代码将坐标附加到python对象,因为该代码正在生成独立的输出(即它正在使用“ show”)。独立输出是发送到浏览器的纯静态HTML和Bokeh JSON,无需与任何Python进程建立任何连接。如果要将Bokeh可视化连接到实际运行的Python进程,请that is what the Bokeh server is for。
如果运行Bokeh服务器应用程序,则可以将on_event
与真实的python回调一起使用,以使用Tap even值运行所需的任何python代码:
def callback(event):
# use event['x'], event['y'], event['sx'], event['sy']
p.on_event(Tap, callback)