Выделение диапазона между выбранными точками
есть точечный график в матплотлибе, необходимо сделать так, чтобы при нажатии на две точки выделялся весь диапазон точек между ними ,не могли бы вы подсказать как это сделать ?
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
import matplotlib.backend_bases
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
# выделим новую точку
selected_point, = plt.plot(np.take(xdata, ind)[0], np.take(ydata, ind)[0], 'ro')
plt.draw()
def onMouseClick(event: matplotlib.backend_bases.MouseEvent) -> None:
axes = event.inaxes
print(axes)
# Если кликнули вне какого-либо графика, то не будем ничего делать
if axes is None:
return
global marker
if event.button == 3:
marker.remove()
# Координаты клика в системе координат осей
xq = event.xdata
yq = event.ydata
text = f'({xq:.3f}; {yq:.3f})'
print(text)
marker = axes.text(xq, yq, text)
if event.button == 3:
marker.remove()
axes.figure.canvas.draw()
fig.canvas.mpl_connect('button_press_event', onMouseClick)
fig.canvas.mpl_connect('pick_event', onpick1)
plt.show()