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