Créer un graphique de champ de flux avec Matplotlib en Python

MatplotlibMatplotlibBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce tutoriel vous guidera tout au long du processus de création d'un graphique de champ de flux à l'aide de Matplotlib en Python. Un graphique de champ de flux est un champ vectoriel 2D qui affiche un ensemble de lignes de courant. Il est utilisé pour visualiser l'écoulement de fluides et d'autres champs vectoriels. Dans ce tutoriel, nous allons vous montrer comment créer un graphique de champ de flux avec une densité, une couleur et une largeur de ligne variables, tout en contrôlant les points de départ des lignes de courant.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.

Importation des bibliothèques

Avant de commencer, nous devons importer les bibliothèques requises. Dans ce tutoriel, nous utiliserons les bibliothèques Numpy et Matplotlib. Numpy est utilisée pour les opérations numériques et Matplotlib est utilisée pour la visualisation de données.

import matplotlib.pyplot as plt
import numpy as np

Création des données

Nous allons créer les données pour notre graphique de champ de flux à l'aide de la bibliothèque Numpy. Dans cet exemple, nous allons créer une grille de maillage avec 100 points dans les deux directions et calculer les composantes U et V de notre champ vectoriel.

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)

Densité variable

Dans cette étape, nous allons créer un graphique de champ de flux avec une densité variable. Le paramètre density contrôle le nombre de lignes de courant à tracer. Des valeurs plus élevées résulteront en plus de lignes de courant.

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

Couleur variable

Dans cette étape, nous allons créer un graphique de champ de flux avec une couleur variable. Le paramètre color prend un tableau 2D qui représente l'amplitude du champ vectoriel. Ici, nous utilisons la composante U du champ vectoriel comme couleur.

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

Largeur de ligne variable

Dans cette étape, nous allons créer un graphique de champ de flux avec une largeur de ligne variable. Le paramètre linewidth contrôle la largeur des lignes de courant. Ici, nous utilisons le tableau speed que nous avons calculé précédemment pour varier la largeur de ligne.

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()

Contrôle des points de départ

Dans cette étape, nous allons créer un graphique de champ de flux avec des points de départ contrôlés. Le paramètre start_points prend un tableau 2D qui représente les points de départ des lignes de courant.

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()

Graphique de champ de flux avec masquage

Dans cette étape, nous allons créer un graphique de champ de flux avec masquage. Nous allons créer un masque et l'appliquer à la composante U de notre champ vectoriel. La région masquée sera ignorée par les lignes de courant.

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()

Lignes de courant continues

Dans cette étape, nous allons créer un graphique de champ de flux avec des lignes de courant continues. Le paramètre broken_streamlines contrôle si les lignes de courant doivent être interrompues lorsqu'elles dépassent la limite de lignes dans une seule cellule de grille.

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

Sommaire

Dans ce tutoriel, nous avons appris à créer un graphique de champ de flux à l'aide de Matplotlib en Python. Nous avons abordé divers paramètres de la fonction streamplot, notamment la densité variable, la couleur et la largeur de ligne. Nous avons également appris à contrôler les points de départ des lignes de courant, à appliquer des masques et à tracer des lignes de courant continues.