Matplotlib Tricontour Smooth User

PythonPythonBeginner
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 laboratoire vous guidera tout au long du processus de création de tricontours haute résolution sur des maillages triangulaires définis par l'utilisateur à l'aide de Matplotlib. Vous allez apprendre à créer une Triangulation, à raffiner les données et à tracer la triangulation et les iso-contours haute résolution.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez sur le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de 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églerons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/BasicConceptsGroup -.-> python/booleans("Booleans") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") subgraph Lab Skills python/booleans -.-> lab-49004{{"Matplotlib Tricontour Smooth User"}} python/lists -.-> lab-49004{{"Matplotlib Tricontour Smooth User"}} python/tuples -.-> lab-49004{{"Matplotlib Tricontour Smooth User"}} python/function_definition -.-> lab-49004{{"Matplotlib Tricontour Smooth User"}} python/build_in_functions -.-> lab-49004{{"Matplotlib Tricontour Smooth User"}} end

Fonction de test analytique

Dans cette étape, nous définissons une fonction de test analytique qui sera utilisée pour générer des valeurs de z pour la triangulation. La fonction s'appelle function_z et prend deux arguments, x et y. Elle calcule z en fonction des valeurs de x et y, et renvoie les valeurs normalisées de z.

def function_z(x, y):
    r1 = np.sqrt((0.5 - x)**2 + (0.5 - y)**2)
    theta1 = np.arctan2(0.5 - x, 0.5 - y)
    r2 = np.sqrt((-x - 0.2)**2 + (-y - 0.2)**2)
    theta2 = np.arctan2(-x - 0.2, -y - 0.2)
    z = -(2 * (np.exp((r1 / 10)**2) - 1) * 30. * np.cos(7. * theta1) +
          (np.exp((r2 / 10)**2) - 1) * 30. * np.cos(11. * theta2) +
          0.7 * (x**2 + y**2))
    return (np.max(z) - z) / (np.max(z) - np.min(z))

Création d'une triangulation

Dans cette étape, nous créons les coordonnées x et y des points à l'aide de np.linspace et np.repeat. Nous utilisons ensuite la fonction function_z définie dans l'étape 1 pour calculer les valeurs de z. Enfin, nous créons la triangulation à l'aide de tri.Triangulation.

n_angles = 20
n_radii = 10
min_radius = 0.15
radii = np.linspace(min_radius, 0.95, n_radii)

angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False)
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
angles[:, 1::2] += np.pi / n_angles

x = (radii * np.cos(angles)).flatten()
y = (radii * np.sin(angles)).flatten()
z = function_z(x, y)

triang = tri.Triangulation(x, y)
triang.set_mask(np.hypot(x[triang.triangles].mean(axis=1),
                         y[triang.triangles].mean(axis=1))
                < min_radius)

Raffinement des données

Dans cette étape, nous utilisons tri.UniformTriRefiner pour raffiner les données. Nous utilisons la méthode refine_field pour raffiner les valeurs de z et créer une nouvelle triangulation avec une résolution plus élevée.

refiner = tri.UniformTriRefiner(triang)
tri_refi, z_test_refi = refiner.refine_field(z, subdiv=3)

Tracer la triangulation et les iso-contours haute résolution

Dans cette étape, nous traçons la triangulation et les iso-contours haute résolution à l'aide de ax.triplot, ax.tricontourf et ax.tricontour.

fig, ax = plt.subplots()
ax.set_aspect('equal')
ax.triplot(triang, lw=0.5, color='white')

levels = np.arange(0., 1., 0.025)
ax.tricontourf(tri_refi, z_test_refi, levels=levels, cmap='terrain')
ax.tricontour(tri_refi, z_test_refi, levels=levels,
              colors=['0.25', '0.5', '0.5', '0.5', '0.5'],
              linewidths=[1.0, 0.5, 0.5, 0.5, 0.5])

ax.set_title("High-resolution tricontouring")

plt.show()

Sommaire

Dans ce laboratoire, vous avez appris à créer des iso-contours haute résolution sur des maillages triangulaires définis par l'utilisateur à l'aide de Matplotlib. Vous avez appris à créer une triangulation, à raffiner les données et à tracer la triangulation et les iso-contours haute résolution.