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