Comment définir le rapport hauteur/largeur dans Matplotlib



Le rapport hauteur/largeur d’un tracé matplotlib fait référence à l’aspect de la mise à l’échelle de l’axe, c’est-à-dire le rapport entre l’unité y et l’unité x.

Ce rapport peut être modifié en utilisant la fonction matplotlib.axes.Axes.set_aspect() .

Sous le capot, la fonction set_aspect() modifie en fait ce qu’on appelle le système de coordonnées des données , mais en pratique, nous souhaitons généralement modifier le système de coordonnées d’affichage .

Pour faciliter cette conversion, nous pouvons utiliser ce bout de code :

#define y-unit to x-unit ratio
ratio = 1.0

#get x and y limits
x_left, x_right = ax.get_xlim()
y_low, y_high = ax.get_ylim()

#set aspect ratio
ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio)

Passons en revue un exemple d’utilisation de cette fonction dans la pratique.

Étape 1 : Créer un tracé Matplotlib de base

Tout d’abord, créons un graphique linéaire simple à l’aide de Matplotlib :

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#display plot
plt.show()

Étape 2 : Définir le rapport hauteur/largeur (dans le mauvais sens)

Notez que l’axe des x est plus long que l’axe des y. Essayons de définir le rapport hauteur/largeur sur 1, c’est-à-dire que l’axe des x et l’axe des y doivent être égaux :

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#attempt to set aspect ratio to 1
ax.set_aspect(1)

#display plot
plt.show()

Notez que cela n’a pas fonctionné comme prévu. L’axe des y est beaucoup plus long que l’axe des x.

Étape 3 : Définissez le rapport hauteur/largeur (de la bonne manière)

Le code suivant montre comment utiliser un calcul simple pour définir le rapport hauteur/largeur correct :

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#set aspect ratio to 1
ratio = 1.0
x_left, x_right = ax.get_xlim()
y_low, y_high = ax.get_ylim()
ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio)

#display plot
plt.show()

Définir les proportions du tracé matplotlib

Notez que cette intrigue a le rapport hauteur/largeur auquel nous nous attendions. L’axe des x et l’axe des y sont de longueurs égales.

Étape 4 : Ajustez le rapport hauteur/largeur comme vous le souhaitez

Si nous souhaitons que l’axe des y soit plus long que l’axe des x, nous pouvons simplement spécifier que le rapport hauteur/largeur soit un nombre supérieur à 1 :

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#set aspect ratio to 3
ratio = 3
x_left, x_right = ax.get_xlim()
y_low, y_high = ax.get_ylim()
ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio)

#display plot
plt.show()

Format d'image matplotlib

Et si nous souhaitons que l’axe des y soit plus court que l’axe des x, nous pouvons simplement spécifier que le rapport hauteur/largeur soit un nombre inférieur à 1 :

import matplotlib.pyplot as plt

#define matplotlib figure and axis
fig, ax = plt.subplots()

#create simple line plot
ax.plot([0, 10],[0, 20])

#set aspect ratio to .3
ratio = .3
x_left, x_right = ax.get_xlim()
y_low, y_high = ax.get_ylim()
ax.set_aspect(abs((x_right-x_left)/(y_low-y_high))*ratio)

#display plot
plt.show()

Rapport d'aspect matplotlib axe x plus long que l'axe y

Vous pouvez trouver plus de didacticiels Matplotlib ici .

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *