Cоздание точек в matplotlib (выделение точек )

Есть программа, которая строит точки на графике в matplotlib и, согласно этой программе, при нажатии на точку появляются ее координаты. Координаты появляются только при нажатии на точку, если нажать на любую другую область графика ничего выводиться не будет, необходимо сделать так чтобы при нажатии на точку с координатами на ней создавалась еще одна точка ,но чтобы точки могли создаваться только на точках с координатами, в любой другой области графика создавать их не нужно

from __future__ import print_function
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
from matplotlib.patches import Rectangle
from matplotlib.text import Text
from matplotlib.image import AxesImage
import numpy as np
from numpy.random import rand

if 1:
fig, ax = plt.subplots()
ax.set_title('click on points', picker=True)
ax.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red'))
line, = ax.plot(rand(100), 'o', picker=5)

def onpick1(event):
    if isinstance(event.artist, Line2D):
        thisline = event.artist
        xdata = thisline.get_xdata()
        ydata = thisline.get_ydata()
        ind = event.ind
        print( 'X='+str(np.take(xdata, ind)[0])) # Print X point
        print ('Y='+str(np.take(ydata, ind)[0])) # Print Y point


fig.canvas.mpl_connect('pick_event', onpick1)
plt.show()

Ответы (1 шт):

Автор решения: Acinit

Не совсем понятно, что вам нужно. Но допускаю, что вы имели в виду выделение существующей точки на графике, можно данного добиться следующим образом, вот ваш код:

from __future__ import print_function
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
from matplotlib.patches import Rectangle
from matplotlib.text import Text
from matplotlib.image import AxesImage
import numpy as np
from numpy.random import rand

fig, ax = plt.subplots()
ax.set_title('click on points', picker=True)
ax.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red'))
line, = ax.plot(rand(100), 'o', picker=5)

selected_point = None #создадим переменную для выделенных точек

def onpick1(event):
    global selected_point
    if isinstance(event.artist, Line2D):
        thisline = event.artist
        xdata = thisline.get_xdata()
        ydata = thisline.get_ydata()
        ind = event.ind
        print( 'X='+str(np.take(xdata, ind)[0])) # Print X point
        print ('Y='+str(np.take(ydata, ind)[0])) # Print Y point

        if selected_point:
            selected_point.remove() #уберём старое выделение
        
        #выделим новую точку
        selected_point, = plt.plot(np.take(xdata, ind)[0], np.take(ydata, ind)[0], 'ro') 
        plt.draw()

fig.canvas.mpl_connect('pick_event', onpick1)
plt.show()

Результат клика по точке

введите сюда описание изображения

→ Ссылка