Comment mettre les axes en coordonnées polaires avec matplotlib de python ?

Published: 30 mars 2014

Updated: 06 septembre 2024

DMCA.com Protection Status

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

Comment définir l'axe en coordonnées polaires dans Matplotlib ?
Comment définir l'axe en coordonnées polaires dans Matplotlib ?

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

Comment définir l'axe en coordonnées polaires dans Matplotlib ?
Comment définir l'axe en coordonnées polaires dans Matplotlib ?

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

Comment définir l'axe en coordonnées polaires dans Matplotlib ?
Comment définir l'axe en coordonnées polaires dans Matplotlib ?

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

Comment définir l'axe en coordonnées polaires dans Matplotlib ?
Comment définir l'axe en coordonnées polaires dans Matplotlib ?

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

Comment définir l'axe en coordonnées polaires dans Matplotlib ?
Comment définir l'axe en coordonnées polaires dans Matplotlib ?

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

Image

of