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()
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()
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()
Vous pouvez trouver plus de didacticiels Matplotlib ici .