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()
Результат клика по точке
