Introduction
Ce guide explique comment configurer et manipuler les axes en coordonnées polaires à l'aide de Matplotlib, une bibliothèque Python populaire pour la création de graphiques. Nous allons aborder les bases de la création d'un graphique polaire, le réglage des graduations de l'axe, la représentation de points et de fonctions, ainsi que la visualisation d'un motif de diffraction de Fraunhofer.
Configurer l'axe en coordonnées polaires
Pour configurer un graphique en coordonnées polaires, il est nécessaire de définir l'option projection='polar'
lors de la création de l'axe. Voici un exemple simple :
1 2 3 4 5 6 7 | import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111, projection='polar') plt.savefig("polar_coordinates_01.png", bbox_inches='tight') plt.show() |
Dans cet exemple, nous créons une figure et définissons un axe avec une projection polaire. Le graphique est ensuite enregistré et affiché.
Formater les graduations de l'axe polaire
Vous pouvez modifier les graduations sur les axes radial (r) et angulaire (theta) à l'aide des fonctions set_xticks
et set_yticks
. Cela est particulièrement utile si vous avez besoin de personnaliser les étiquettes de votre graphique.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111, projection='polar') # Définir les graduations angulaires personnalisées (en radians) ax.set_xticks(np.arange(0, 2.0 * np.pi, np.pi / 6)) # Définir les limites radiales et les graduations personnalisées ax.set_ylim(0, 4) ax.set_yticks(np.arange(0, 4, 1)) plt.savefig("polar_coordinates_02.png", bbox_inches='tight') plt.show() |
Dans cet exemple, les graduations angulaires sont définies pour diviser le cercle complet (2π radians) en 12 parties, et l'axe radial est limité à une plage de 0 à 4.
Tracer un point en coordonnées polaires
Pour tracer un point unique, il est nécessaire de spécifier son rayon r
et son angle theta
(en radians). Vous pouvez utiliser la fonction numpy.deg2rad()
pour convertir des degrés en radians si nécessaire.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import matplotlib.pyplot as plt import numpy as np r = 2.0 theta = np.deg2rad(60.0) # Convertir 60 degrés en radians fig = plt.figure() ax = fig.add_subplot(111, projection='polar') # Tracer un point à (r, theta) ax.scatter(theta, r) # Formater l'axe ax.set_xticks(np.arange(0, 2.0 * np.pi, np.pi / 6)) ax.set_ylim(0, 4) ax.set_yticks(np.arange(0, 4, 1)) plt.savefig("polar_coordinates_03.png", bbox_inches='tight') plt.show() |
Ici, un point unique avec un rayon de 2.0 unités et un angle de 60 degrés est tracé.
Tracer une fonction en coordonnées polaires
Vous pouvez également tracer des fonctions en coordonnées polaires, où theta
représente la coordonnée angulaire et r
la coordonnée radiale.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import matplotlib.pyplot as plt import numpy as np r = np.arange(0, 6, 0.01) theta = 2 * np.pi * r # Une fonction en spirale fig = plt.figure() ax = fig.add_subplot(111, projection='polar') # Tracer la fonction ax.plot(theta, r) # Formater l'axe ax.set_xticks(np.arange(0, 2.0 * np.pi, np.pi / 6)) ax.set_ylim(0, 4) ax.set_yticks(np.arange(0, 4, 1)) plt.savefig("polar_coordinates_04.png", bbox_inches='tight') plt.show() |
Dans cet exemple, nous traçons une fonction en spirale où la distance radiale augmente avec theta
.
Tracer une surface : Motif de diffraction de Fraunhofer
Voici un exemple avancé de tracé d'un motif de diffraction de Fraunhofer à partir d'un jeu de données, visualisant la distribution d'intensité en coordonnées polaires. (FraunhoferHexagonalAperture_Data.txt)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #!/usr/bin/env python import numpy as np import matplotlib.pyplot as plt import matplotlib.cm as cm from matplotlib import ticker # Charger le jeu de données r, theta, refl = np.loadtxt("FraunhoferHexagonalAperture_Data.txt", unpack=True) # Reformer les données de réflexion pour le tracé des contours refl = np.reshape(refl, (360, -1)) # Générer une grille pour le tracé polaire azimuths = np.radians(np.linspace(0, 360, 360)) zeniths = np.arange(0.00000000001, 30, 0.1) r, theta = np.meshgrid(zeniths, azimuths) # Créer le graphique polaire fig, ax = plt.subplots(subplot_kw=dict(projection='polar')) # Définir les niveaux de contour pour l'intensité de diffraction niveaux_contours = [0.0000000001, 0.000000001, 0.00000001, 0.0000001, 0.000001, 0.00001, 0.0001, 0.001, 0.01, 0.1, 1.0] # Tracer les contours remplis CS = ax.contourf(theta, r, refl, niveaux_contours, cmap=cm.gist_earth_r, locator=ticker.LogLocator()) # Ajouter une barre de couleur cbar = plt.colorbar(CS) cbar.set_label(r"Intensité diffractée de Fraunhofer $I/I_0$") plt.savefig('FraunhoferHexagonalAperture.png') plt.show() |
Dans ce graphique, nous visualisons l'intensité d'un motif de diffraction de Fraunhofer, avec des contours représentant différents niveaux d'intensité.
Références
Lien | Site |
---|---|
Wikipedia: Coordonnées Polaires | wikipedia |
Documentation Matplotlib: Tracé de points en coordonnées polaires | matplotlib.org |
Exemple Matplotlib: Démonstration polaire | matplotlib.org |
API Matplotlib: Graphiques polaires | matplotlib.org |
Stack Overflow: Limite de l'axe en tracé polaire | stackoverflow.com |
Exemple Matplotlib: Transoffset | matplotlib.org |