Анимированный трехмерный случайный блуждания в Matplotlib

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

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

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

Введение

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

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

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

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

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

Импортируем необходимые библиотеки

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

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

Определяем функцию случайного блуждания

Определяем функцию, которая генерирует случайное блуждание с заданным количеством шагов и максимальным размером шага. Функция принимает два входных параметра: num_steps - общее количество шагов в случайном блуждании, и max_step - максимальный размер каждого шага. Мы используем numpy.random для генерации случайных чисел для шагов и numpy.cumsum для вычисления накопленной суммы шагов, чтобы получить конечную позицию.

def random_walk(num_steps, max_step=0.05):
    """Return a 3D random walk as (num_steps, 3) array."""
    start_pos = np.random.random(3)
    steps = np.random.uniform(-max_step, max_step, size=(num_steps, 3))
    walk = start_pos + np.cumsum(steps, axis=0)
    return walk

Определяем функцию обновления

Определяем функцию, которая обновляет график для каждого кадра анимации. Функция принимает три входных параметра: num - номер текущего кадра, walks - список всех случайных блужданий, и lines - список всех линий на графике. Для каждой линии и случайного блуждания мы обновляем данные по координатам x, y и z линии до текущего номера кадра. Мы используем line.set_data() и line.set_3d_properties() для обновления координат x-y и z соответственно.

def update_lines(num, walks, lines):
    for line, walk in zip(lines, walks):
        ## NOTE: there is no.set_data() for 3 dim data...
        line.set_data(walk[:num, :2].T)
        line.set_3d_properties(walk[:num, 2])
    return lines

Генерируем случайные блуждания

Мы генерируем 40 случайных блужданий по 30 шагов каждый с использованием функции random_walk(), определенной ранее. Все случайные блуждания храним в списке под названием walks.

## Data: 40 random walks as (num_steps, 3) arrays
num_steps = 30
walks = [random_walk(num_steps) for index in range(40)]

Создаем трехмерный график

Мы создаем трехмерный график с использованием matplotlib. К графику добавляем пустую линию для каждого случайного блуждания. Задаем пределы для осей x, y и z в диапазоне от 0 до 1.

## Attaching 3D axis to the figure
fig = plt.figure()
ax = fig.add_subplot(projection="3d")

## Create lines initially without data
lines = [ax.plot([], [], [])[0] for _ in walks]

## Setting the axes properties
ax.set(xlim3d=(0, 1), xlabel='X')
ax.set(ylim3d=(0, 1), ylabel='Y')
ax.set(zlim3d=(0, 1), zlabel='Z')

Создаем анимацию

Мы создаем анимацию с использованием класса FuncAnimation из matplotlib.animation. В качестве аргументов конструктора FuncAnimation передаем объект фигуры, функцию обновления, общее количество кадров (которое равно количеству шагов в случайных блужданиях), список всех случайных блужданий и список всех линий.

## Creating the Animation object
ani = animation.FuncAnimation(
    fig, update_lines, num_steps, fargs=(walks, lines), interval=100)

Показываем анимацию

Наконец, мы показываем анимацию с использованием plt.show().

plt.show()

Резюме

Мы научились создавать анимированный трехмерный график случайного блуждания с использованием библиотеки Matplotlib в Python. Мы генерировали случайные блуждания и обновляли график для каждого кадра анимации. Эта техника может быть использована для визуализации движения частиц, диффузии и других стохастических процессов в трехмерном пространстве.