Демонстрация селектора Lasso Sgskip

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом практическом занятии вы научитесь интерактивно выбирать точки данных с помощью инструмента 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.