Создание интерактивного графика триангуляции с использованием Matplotlib

PythonPythonBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

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

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

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

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

Создание объекта Triangulation

Во - первых, нам нужно создать объект Triangulation. Мы будем использовать класс Triangulation из matplotlib.tri. В этом примере мы создадим объект Triangulation с случайными данными.

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.tri import Triangulation

## Generate random data
x = np.random.rand(10)
y = np.random.rand(10)
triang = Triangulation(x, y)

Создание объекта TriFinder

Для поиска треугольника под указателем мыши нам нужно создать объект TriFinder. Мы можем получить стандартный объект TriFinder из объекта Triangulation с помощью метода get_trifinder().

trifinder = triang.get_trifinder()

Настройка графика

Теперь мы можем настроить график. Мы будем использовать plt.subplots(), чтобы создать объект фигуры и оси. Затем мы будем использовать ax.triplot(), чтобы построить триангуляцию.

fig, ax = plt.subplots()
ax.triplot(triang)

Подсветка треугольника под указателем мыши

Мы хотим подсвечивать треугольник под указателем мыши при перемещении указателя по графику. Для этого мы создадим объект Polygon, который будет обновляться вершинами треугольника под указателем мыши. Мы будем использовать ax.add_patch(), чтобы добавить многоугольник на график.

from matplotlib.patches import Polygon

polygon = Polygon([[0, 0], [0, 0], [0, 0]], facecolor='y')
ax.add_patch(polygon)

Мы также создадим функцию update_polygon(), которая будет обновлять вершины многоугольника вершинами треугольника под указателем мыши.

def update_polygon(tri):
    if tri == -1:
        points = [0, 0, 0]
    else:
        points = triang.triangles[tri]
    xs = triang.x[points]
    ys = triang.y[points]
    polygon.set_xy(np.column_stack([xs, ys]))

Настройка интерактивности

Нам нужно настроить интерактивность для обновления треугольника под указателем мыши. Мы будем использовать событие motion_notify_event, чтобы определить, когда указатель мыши перемещается по графику. Мы создадим функцию on_mouse_move(), которая будет получать треугольник под указателем мыши с использованием объекта TriFinder, обновлять многоугольник вершинами треугольника и обновлять заголовок графика индексом треугольника.

def on_mouse_move(event):
    if event.inaxes is None:
        tri = -1
    else:
        tri = trifinder(event.xdata, event.ydata)
    update_polygon(tri)
    ax.set_title(f'Triangle {tri}')
    event.canvas.draw()

fig.canvas.mpl_connect('motion_notify_event', on_mouse_move)

Показать график

Наконец, мы можем показать график с использованием plt.show().

plt.show()

Резюме

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