Демонстрация Lasso в Matplotlib

Beginner

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

Введение

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

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

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

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

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

Импортировать библиотеки

Сначала импортируем необходимые библиотеки для лабы. Мы будем использовать matplotlib для создания диаграммы и numpy для генерации случайных данных.

import matplotlib.pyplot as plt
import numpy as np

Создать класс LassoManager

Далее создадим класс LassoManager, который будет обрабатывать функциональность лассо. Метод __init__ инициализирует объект графика и коллекцию. Метод callback изменяет цвет выбранных точек, а методы on_press и on_release обрабатывают события мыши.

class LassoManager:
    def __init__(self, ax, data):
        ## Информация о том, была ли точка выбрана или нет, хранится в массиве коллекции (0 = вне, 1 = внутри),
        ## который затем отображается с помощью цветовой карты в синий (вне) и красный (внутри).
        self.collection = RegularPolyCollection(
            6, sizes=(100,), offset_transform=ax.transData,
            offsets=data, array=np.zeros(len(data)),
            clim=(0, 1), cmap=mcolors.ListedColormap(["tab:blue", "tab:red"]))
        ax.add_collection(self.collection)
        canvas = ax.figure.canvas
        canvas.mpl_connect('button_press_event', self.on_press)
        canvas.mpl_connect('button_release_event', self.on_release)

    def callback(self, verts):
        data = self.collection.get_offsets()
        self.collection.set_array(path.Path(verts).contains_points(data))
        canvas = self.collection.figure.canvas
        canvas.draw_idle()
        del self.lasso

    def on_press(self, event):
        canvas = self.collection.figure.canvas
        if event.inaxes is not self.collection.axes or canvas.widgetlock.locked():
            return
        self.lasso = Lasso(event.inaxes, (event.xdata, event.ydata), self.callback)
        canvas.widgetlock(self.lasso)  ## получить блокировку для рисования виджета

    def on_release(self, event):
        canvas = self.collection.figure.canvas
        if hasattr(self, 'lasso') and canvas.widgetlock.isowner(self.lasso):
            canvas.widgetlock.release(self.lasso)

Создать график

Теперь используем класс LassoManager для создания интерактивного графика. Функция np.random.rand генерирует случайные точки данных, которые будут нарисованы.

if __name__ == '__main__':
    np.random.seed(19680801)
    ax = plt.figure().add_subplot(
        xlim=(0, 1), ylim=(0, 1), title='Lasso points using left mouse button')
    manager = LassoManager(ax, np.random.rand(100, 2))
    plt.show()

Резюме

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