Я пытаюсь создать график рассеяния Matplotlib с перетаскиваемыми маркерами.
Я нашел перетаскиваемый пример прямоугольника на сайте Matplotlib, https://matplotlib.org/users/event_handling.html. Кажется, что подход заключается в создании класса DraggableRectangle, которыйобрабатывает события мыши, которые инициализируются и соединяются для каждого прямоугольника на линейчатой диаграмме.
Я пытался сделать нечто подобное с точечной диаграммой, но когда я пытаюсь перебрать маркеры, я получаю typeError: 'Объект PathCollection 'не повторяется.
import numpy as np
import matplotlib.pyplot as plt
class DraggableMarker:
def __init__(self, marker):
self.marker = marker
def connect(self):
self.cidpress = self.rect.figure.canvas.mpl_connect(
'button_press_event', self.on_press)
self.cidrelease = self.rect.figure.canvas.mpl_connect(
'button_release_event', self.on_release)
self.cidmotion = self.rect.figure.canvas.mpl_connect(
'motion_notify_event', self.on_motion)
def on_press(self, event):
pass
def on_motion(self, event):
pass
def on_release(self, event):
pass
def disconnect(self):
self.rect.figure.canvas.mpl_disconnect(self.cidpress)
self.rect.figure.canvas.mpl_disconnect(self.cidrelease)
self.rect.figure.canvas.mpl_disconnect(self.cidmotion)
fig, ax = plt.subplots(1, 1)
markers = ax.scatter(np.random.rand(10), np.random.rand(10), marker ='o')
draggable_markers = []
for marker in markers:
draggable_marker = DraggableMarker(marker)
draggable_marker.connect()
draggable_markers.append(draggable_marker)
plt.show()
Как правильно это сделать?