Создание поточной диаграммы с использованием Matplotlib в Python

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

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

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

Введение

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

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

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

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

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

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

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

import matplotlib.pyplot as plt
import numpy as np

Создать данные

Мы создадим данные для нашей поточной диаграммы с использованием библиотеки Numpy. В этом примере мы создадим сетку с 100 точками в обоих направлениях и вычислим компоненты U и V нашего векторного поля.

w = 3
Y, X = np.mgrid[-w:w:100j, -w:w:100j]
U = -1 - X**2 + Y
V = 1 + X - Y**2
speed = np.sqrt(U**2 + V**2)

Переменная плотность

В этом шаге мы создадим поточную диаграмму с переменной плотностью. Параметр density контролирует количество линий потока, которые будут нарисованы. Более высокие значения приведут к большему количеству линий потока.

plt.streamplot(X, Y, U, V, density=[0.5, 1])
plt.title('Varying Density')
plt.show()

Переменный цвет

В этом шаге мы создадим поточную диаграмму с изменяющимся цветом. Параметр color принимает двумерный массив, представляющий величину векторного поля. Здесь мы используем компоненту U векторного поля в качестве цвета.

strm = plt.streamplot(X, Y, U, V, color=U, linewidth=2, cmap='autumn')
plt.colorbar(strm.lines)
plt.title('Varying Color')
plt.show()

Переменная ширина линии

В этом шаге мы создадим поточную диаграмму с изменяемой шириной линии. Параметр linewidth контролирует ширину линий потока. Здесь мы используем массив speed, который мы вычисляли ранее, чтобы изменить ширину линии.

lw = 5*speed / speed.max()
plt.streamplot(X, Y, U, V, density=0.6, color='k', linewidth=lw)
plt.title('Varying Line Width')
plt.show()

Управление точками начала

В этом шаге мы создадим поточную диаграмму с контролируемыми точками начала. Параметр start_points принимает двумерный массив, представляющий точки начала линий потока.

seed_points = np.array([[-2, -1, 0, 1, 2, -1], [-2, -1, 0, 1, 2, 2]])

strm = plt.streamplot(X, Y, U, V, color=U, linewidth=2,
                      cmap='autumn', start_points=seed_points.T)
plt.colorbar(strm.lines)
plt.title('Controlling Starting Points')
plt.plot(seed_points[0], seed_points[1], 'bo')
plt.xlim(-w, w)
plt.ylim(-w, w)
plt.show()

Поточная диаграмма с маскированием

В этом шаге мы создадим поточную диаграмму с маскированием. Мы создадим маску и применим ее к компоненте U нашего векторного поля. Линии потока будут пропускать замаскированную область.

mask = np.zeros(U.shape, dtype=bool)
mask[40:60, 40:60] = True
U[:20, :20] = np.nan
U = np.ma.array(U, mask=mask)

plt.streamplot(X, Y, U, V, color='r')
plt.title('Streamplot with Masking')
plt.imshow(~mask, extent=(-w, w, -w, w), alpha=0.5, cmap='gray', aspect='auto')
plt.gca().set_aspect('equal')
plt.show()

Непрерывные линии потока

В этом шаге мы создадим поточную диаграмму с непрерывными линиями потока. Параметр broken_streamlines контролирует, должны ли линии потока быть разрывами, когда они превышают предел количества линий в одной ячейке сетки.

plt.streamplot(X, Y, U, V, broken_streamlines=False)
plt.title('Streamplot with Unbroken Streamlines')
plt.show()

Резюме

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