散景图中点的交互式欧式距离

时间:2019-06-23 11:37:22

标签: python bokeh

我在绘图上有两条线,可以拖放以更改其位置和长度。我想为它们两者计算欧几里德距离,并在图上显示出来(可以在标题,小部件或表格中)。更改位置后,距离也应更改。

到目前为止,我已经想到了这一点,但是我不知道如何从图中获取点的位置并计算距离。我以为可以从表中提取出来,或者在列中有一个公式,但是它停止刷新。

我已经阅读了有关JS回调的信息,但这让我感到困惑。

output_file("tools_point_draw.html")
_tools_to_show = 'box_zoom,pan,save,hover,reset,tap'        

p = figure(x_range=(0, 10), y_range=(0, 10), tools=_tools_to_show,
           plot_width=862, plot_height=604,
           title='Lesion adjuster')

p.xgrid.visible = False
p.ygrid.visible = False
p.xaxis.visible = False
p.yaxis.visible = False


p.background_fill_color = 'white'

d_true = {'x': [2, 3], 'y': [4, 1], 
          'color': ['red', 'red'],
          'desc': ['true','true']}

d_pred = {'x': [1, 5], 'y': [6, 5], 
          'color': ['blue', 'blue'],
          'desc': ['pred','pred']}

df_true = pd.DataFrame(d_true)
df_pred = pd.DataFrame(d_pred)

df_all = pd.concat([df_true, df_pred])

source_true = ColumnDataSource(df_true)
source_pred = ColumnDataSource(df_pred)
source_all = ColumnDataSource(df_all)

renderer_true_s = p.scatter(x='x', y='y', source=source_true, color='color', size=15,
                             line_color='red', line_width=5)
renderer_true_l = p.line(x='x', y='y', source=source_true, color='red',
                         line_dash='dashed', line_width=10)

renderer_pred_s = p.scatter(x='x', y='y', source=source_pred, color='color', 
                            size=15, line_color='blue', line_width=5)
renderer_pred_l = p.line(x='x', y='y', source=source_pred, color='blue',
                         line_dash='dashed', line_width=10)

columns = [TableColumn(field="x", title="I am X"),
           TableColumn(field="y", title="I am Y"),
           TableColumn(field='color', title='color'),
           TableColumn(field='desc', title='desc')]
table = DataTable(source=source_all, columns=columns, editable=True, height=400)

draw_tool = PointDrawTool(renderers=[renderer_true_s, renderer_true_l,
                                     renderer_pred_s, renderer_pred_l], 
                          empty_value='black')
p.add_tools(draw_tool)
p.toolbar.active_tap = draw_tool

show(Column(p, table))

编辑

在另一个问题中关闭并重新定义: Update DataTable on Tap event in Bokeh

0 个答案:

没有答案