Введение
В этом практическом занятии вы научитесь интерактивно выбирать точки данных с помощью инструмента lasso в Python Matplotlib. Вы построите диаграмму рассеяния, а затем выберите несколько точек, нарисовав вокруг них петлю lasso на графике. Чтобы нарисовать петлю, щелкните на графике, удерживайте кнопку мыши и перетаскивайте ее вокруг точек, которые нужно выбрать.
Советы по работе с ВМ
После запуска ВМ перейдите в левый верхний угол и переключитесь на вкладку Notebook, чтобы приступить к практике в Jupyter Notebook.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортировать библиотеки
Импортируйте необходимые библиотеки, включая numpy, Path и LassoSelector.
import numpy as np
from matplotlib.path import Path
from matplotlib.widgets import LassoSelector
Создать класс селектора
Создайте класс SelectFromCollection, который будет выбирать индексы из коллекции Matplotlib с использованием LassoSelector.
class SelectFromCollection:
"""
Выбирает индексы из коллекции matplotlib с использованием `LassoSelector`.
Выбранные индексы сохраняются в атрибуте `ind`. Эта工具 делает непрозрачными точки, которые не входят в выбор (то есть, уменьшает их значения альфа). Если у вашей коллекции альфа < 1, эта工具 будет постоянно изменять значения альфа.
Обратите внимание, что эта工具 выбирает объекты коллекции на основе их *исходных точек* (то есть, `offsets`).
Параметры
----------
ax : `~matplotlib.axes.Axes`
оси для взаимодействия.
collection : `matplotlib.collections.Collection` подкласс
коллекция, из которой вы хотите выбрать.
alpha_other : 0 <= float <= 1
Чтобы выделить выбор, эта工具 устанавливает все выбранные точки в значение альфа 1, а невыбранные точки в *alpha_other*.
"""
def __init__(self, ax, collection, alpha_other=0.3):
self.canvas = ax.figure.canvas
self.collection = collection
self.alpha_other = alpha_other
self.xys = collection.get_offsets()
self.Npts = len(self.xys)
## Убедитесь, что у каждого объекта есть отдельные цвета
self.fc = collection.get_facecolors()
if len(self.fc) == 0:
raise ValueError('Коллекция должна иметь цвет лица')
elif len(self.fc) == 1:
self.fc = np.tile(self.fc, (self.Npts, 1))
self.lasso = LassoSelector(ax, onselect=self.onselect)
self.ind = []
def onselect(self, verts):
path = Path(verts)
self.ind = np.nonzero(path.contains_points(self.xys))[0]
self.fc[:, -1] = self.alpha_other
self.fc[self.ind, -1] = 1
self.collection.set_facecolors(self.fc)
self.canvas.draw_idle()
def disconnect(self):
self.lasso.disconnect_events()
self.fc[:, -1] = 1
self.collection.set_facecolors(self.fc)
self.canvas.draw_idle()
Создать диаграмму рассеяния
Создайте диаграмму рассеяния с использованием случайно сгенерированных данных.
np.random.seed(19680801)
data = np.random.rand(100, 2)
subplot_kw = dict(xlim=(0, 1), ylim=(0, 1), autoscale_on=False)
fig, ax = plt.subplots(subplot_kw=subplot_kw)
pts = ax.scatter(data[:, 0], data[:, 1], s=80)
selector = SelectFromCollection(ax, pts)
Принять выбранные точки
Принимайте выбранные точки с помощью клавиши Enter и выводите их в консоль.
def accept(event):
if event.key == "enter":
print("Выбранные точки:")
print(selector.xys[selector.ind])
selector.disconnect()
ax.set_title("")
fig.canvas.draw()
fig.canvas.mpl_connect("key_press_event", accept)
ax.set_title("Нажмите Enter, чтобы принять выбранные точки.")
plt.show()
Резюме
В этом практическом занятии вы узнали, как интерактивно выбирать точки данных с помощью инструмента лассо с использованием Python и Matplotlib. Вы создали диаграмму рассеяния, выбрали несколько точек, нарисовав вокруг них на графике петлю лассо, а затем приняли выбранные точки с помощью клавиши Enter.