Выбор индексов с использованием селектора полигоном

Beginner

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

Введение

В этом практическом занятии показано, как использовать инструмент "Выбор полигоном" в Matplotlib для выбора индексов из коллекции. Инструмент "Выбор полигоном" позволяет пользователю выбирать точки на графике, рисуя вокруг них полигон. Затем выбранные точки подсвечиваются, а невыбранные становятся менее заметными. Индексы выбранных точек сохраняются в массиве, который затем можно использовать для дальнейшего анализа.

Советы по работе с ВМ

После запуска ВМ щелкните в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами при обучении, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импорт библиотек

В этом шаге мы импортируем необходимые библиотеки для этого практического занятия. Для манипуляции данными и визуализации мы будем использовать numpy и matplotlib.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path
from matplotlib.widgets import PolygonSelector

Создание данных

В этом шаге мы создадим некоторые данные для визуализации. Мы создадим точечный график точек на сетке.

fig, ax = plt.subplots()
grid_size = 5
grid_x = np.tile(np.arange(grid_size), grid_size)
grid_y = np.repeat(np.arange(grid_size), grid_size)
pts = ax.scatter(grid_x, grid_y)

Определение класса селектора

В этом шаге мы определим класс, который позволит нам выбирать точки из точечного графика с использованием инструмента "Выбор полигоном". Этот класс сохранит индексы выбранных точек в массиве.

class SelectFromCollection:
    """
    Выбирает индексы из коллекции matplotlib с использованием `PolygonSelector`.

    Выбранные индексы сохраняются в атрибуте `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.poly = PolygonSelector(ax, self.onselect, draw_bounding_box=True)
        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.poly.disconnect_events()
        self.fc[:, -1] = 1
        self.collection.set_facecolors(self.fc)
        self.canvas.draw_idle()

Создание объекта селектора

В этом шаге мы создадим экземпляр класса селектора, который мы определили в шаге 3. Это позволит нам выбирать точки из точечного графика с использованием инструмента "Выбор полигоном".

selector = SelectFromCollection(ax, pts)

Выбор точек

В этом шаге мы будем выбирать точки из точечного графика с использованием инструмента "Выбор полигоном". Мы можем выбрать точки, нарисовав вокруг них полигон. Выбранные точки будут выделены, а невыбранные будут менее заметными.

print("Select points in the figure by enclosing them within a polygon.")
print("Press the 'esc' key to start a new polygon.")
print("Try holding the 'shift' key to move all of the vertices.")
print("Try holding the 'ctrl' key to move a single vertex.")
plt.show()

Отключение объекта селектора

В этом шаге мы отключим объект селектора, чтобы освободить ресурсы, используемые инструментом "Выбор полигоном".

selector.disconnect()

Печать выбранных точек

В этом шаге мы выведем на печать координаты выбранных точек.

print('\nSelected points:')
print(selector.xys[selector.ind])

Резюме

В этом практическом занятии показано, как использовать инструмент "Выбор полигоном" в Matplotlib для выбора индексов из точечного графика. Класс селектора позволяет пользователю выбирать точки, нарисовав вокруг них полигон. Выбранные точки выделяются, а невыбранные становятся менее заметными. Индексы выбранных точек сохраняются в массиве, который можно использовать для дальнейшего анализа.