У меня есть две линии на графике, которые я могу перетаскивать, чтобы изменить их положение и длину. Я хотел бы рассчитать евклидово расстояние для них обоих и показать его на рисунке (может быть в заголовке, виджете или таблице). Расстояние должно меняться при изменении положения.
До сих пор я придумал это, но я не знаю, как определить положение точек на графике и рассчитать расстояние. Я думал, что смогу каким-то образом извлечь его из таблицы или получить формулу в столбце, но он перестал обновляться.
Я читал о обратных вызовах 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))
EDIT
Закрыто и переформулировано в другом вопросе:
Обновление DataTable при событии Tap в Боке