Я пытаюсь получить координаты в виде списка при нажатии какой-либо точки графика. У меня есть этот пример кода, который я получил здесь в stackoverflow, но я не могу распечатать список или получить к нему доступ из функции обратного вызова, как я могу это сделать?
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
import ipywidgets as widgets
from pathlib import Path
import json
x = np.random.uniform(-10, 10, size=50)
y = np.sin(x)
clicked = []
# construct figure that has holders for points, interpolated line and final lines
fig = go.FigureWidget(
[
go.Scatter(x=x, y=y, mode = "markers", name = "base_points"),
]
)
fig.update_layout(template = "simple_white")
out = widgets.Output(layout = {"border": "1px solid black"})
out.append_stdout("Output appended with append_stdout\n")
# create our callback function
@out.capture()
def base_click(trace, points, selector):
global clicked
clicked.append(points.__dict__)
fig.data[0].on_click(base_click)
widgets.HBox([fig, out])
Я хочу получить доступ к списку, по которому щелкнули, и использовать данные, но я не могу получить к нему доступ и распечатать его на консоли.






Все, что вам нужно сделать, это использовать объект points следующим образом:
@out.capture()
def base_click(trace, points, selector):
global clicked
clicked.append([points.xs[0],points.ys[0]])
print(clicked) #<--- outside the function base_click
Извините, но я все еще не могу заставить его работать. Я не знаю, вызывается ли функция обратного вызова, но всякий раз, когда я нажимаю на график, она вообще ничего не печатает. Я поместил печать в блок try, кроме блока, потому что при инициализации программы она говорит, что щелчок не был определен. Я поместил еще одну печать в функцию обратного вызова, чтобы увидеть, инициализируется ли она, но, по-видимому, нет. Я не знаю, что может быть причиной этого.
@Raxhacks Попробуйте поместить print(clicked) внутри обратного вызова в последней строке, у меня это тоже работает.
@Raxhacks, я хочу спросить вас, хотите ли вы добавить нажатые точки на боковую панель справа от графика?
извините, я только что увидел ответ. Нет, я не хочу добавлять выбранные точки на боковую панель, мой план состоит в том, чтобы получить значения точки для построения вертикальной линии в этой координате. Другое дело, что я уже пытался поставить печать внутри обратного вызова и в последней строке, но все равно не работает.
@Raxhacks Я использовал блокнот Jupyter, какой тип IDE вы используете?
Давайте продолжим обсуждение в чате.
Думаю где проблема. Чтение plotly.com/python/click-events говорит: Примечание. Обратные вызовы будут запускаться только тогда, когда трассировка принадлежит экземпляру plotly.graph_objs.FigureWidget и отображается в контексте ipywidget. Обратные вызовы не будут запускаться для фигур, отображаемых с помощью plot/iplot. В моем коде используется plotly.offline.plot, я не знаю, является ли это основной проблемой.
Спасибо за ответ! Думаю, я знаю, что теперь делать.