> Modules non standards > Matplotlib > Configuration des axes
Configuration des axes
Pour récupérer l'axe des x :
- pyplot.gca().get_xaxis()
- pyplot.gca().xaxis
On utilise ici la forme objet avec des objets Figure, Axes et Axis :
- Rappel : pour avoir l'objet Axes courant, il suffit de faire axes = pyplot.gca() (objet Axes).
- axes.set_xlim(0, 4) : donne les limites du graphe sur l'axe des x.
- axes.set_xlabel('axe des x') : donne l'étiquette sur l'axe des x.
- axes.xaxis.set_ticks(range(5)) : donne la position des graduations sur l'axe des x.
- axes.xaxis.set_ticklabels(['x=0', 'x=1', 'x=2', 'x=3', 'x=4'], rotation = 90, color = 'red', fontsize = 8, style = 'italic', verticalalignment = 'center') : donne les étiquettes à afficher à côté des graduations (par défaut, ce sont simplement les valeurs).
- pour faire tourner les étiquettes des axes, faire simplement : pyplot.xticks(rotation = 'vertical')
- pour avoir des étiquettes à 45, mais qui terminent juste en-dessous de la barre : pyplot.xticks(rotation = 45, ha = 'right')
- on peut changer la taille des ticks par : pyplot.tick_params(axis = 'both', labelsize = 8)
- pour configurer les étiquettes des axes, on peut aussi faire une boucle, ce qui permet éventuellement d'adapter les paramètres pour chaque étiquette !
for label in pyplot.gca().xaxis.get_ticklabels():
label.set_rotation(270)
if 'A' in label.get_text():
label.set_color('red')
- axes.xaxis.set_ticks_position('bottom') : indique que les graduations sont seulement à mettre sur la ligne horizontale du bas du graphe, pas celle du haut. Les autres valeurs possibles sont 'top', 'both' ou 'none'.
- axes.yaxis.set_ticks_position('left') : indique que les graduations sont seulement à mettre sur la ligne verticale gauche du graphe, pas celle de droite. Les autres valeurs possibles sont 'right', 'both' ou 'none'.
- axes.xaxis.set_label_position('top') : indique que l'étiquette de l'axe des x est à mettre sur la ligne horizontale et en haut (et non du bas, qui est le défaut). L'autre valeur possible est 'top', et pour l'axe des y, c'est 'left' ou 'right'.
- pyplot.tick_params(axis = 'both', labelsize = 10) : taille des étiquettes de ticks sur les 2 axes.
- pour supprimer les ticks, mettre leur longueur à 0 : pyplot.gca().tick_params(axis = 'x', length = 0) ou même pyplot.tick_params(axis = 'x', length = 0)
- axes.yaxis.set_tick_params(nom1 = valeur1, nom2 = valeur2, ...) : permet de configurer les différents paramètres des graduations :
- which = 'minor' : indique que ce sont les graduations mineures qui sont concernées. Peut être 'major' (les principales, le défaut), 'minor' ou 'both'.
- direction = 'in' : la direction du tick, 'in' si vers l'intérieur du graphe ou 'out' si vers l'extérieur du graphe.
- pad = 20 : indique d'éloigner l'etiquette, ce qui est utile si les ticks sont vers l'extérieur.
- length = 20 : la longueur du trait (du tick).
- width = 5 : la largeur du trait.
- color = 'red' : la couleur du trait
- labelsize = 20 : la taille de l'étiquette associée au trait.
- labelcolor = 'violet' : la couleur de l'étiquette associée au trait.
- right = True, left = True : indique que les traits doivent à la fois être sur la ligne verticale de gauche et celle de droite (pour l'axe des x, c'est bottom = True, top = True).
- axes.set_yticks([1, 3], minor = True) : donne des graduations mineures sur l'axe des y.
- axes.yaxis.set_ticklabels(['1', '3'], minor = True) : donne les étiquettes associées aux graduations mineures.
- axes.yaxis.grid(True, nom1 = valeur1, nom2 = valeur2, ...) : affiche une grille (traits parallèles qui sont perpendiculaires à l'axe concerné) avec les paramètres donnés :
- color = 'orange' : couleur de la grille.
- linewidth = 1 : épaisseur des lignes de la grille.
- linestyle = 'dashed' : style des lignes de la grille.
- Pour mettre une grid avec un espacement plus fréquent que celui des graduations :
- pyplot.gca().yaxis.set_ticks(range(0, 100, 10), minor = True) : positionne des minor ticks
- pyplot.gca().yaxis.grid(True, which = 'both', color = 'gray', zorder = 0) : met les lignes.
- axes.xaxis.get_view_interval() : renvoie le min et le max (liste à 2 éléments) des valeurs selon l'axe.
- pour changer la taille de la police pour les graduations : pyplot.gca().yaxis.set_tick_params(labelsize = 8).
- Pour changer la taille de la police des graduations :
for tickLabel in pyplot.gca().get_xticklabels() + pyplot.gca().get_yticklabels():
tickLabel.set_fontsize(12)
- si étiquettes dépassent, on peut ajuster automatiquement en faisant à la fin : pyplot.tight_layout()
pyplot.axis :
- pyplot.axis renvoie les coordonnées extrèmes des axes : (xmin, xmax, ymin, ymax).
- axes.get_xbound() : permet d'avoir les valeurs extrèmes sur l'axe des x, utile quand on veut annoter un graphe (idem avec get_ybound())
- pyplot.axis([0, 10, 0, 15]) : donne les coordonnées extrèmes, sous forme [xmin, xmax, ymin, ymax].
- pyplot.axis('off') : supprime les axes (graduations et boîte)
- Pour enlever les graduations et leur étiquettes, mais en conservant la boite : pyplot.xticks([], [])
Exemple :
figure = pyplot.figure()
axes = figure.add_subplot(111)
axes.scatter(range(5), [x ** 2 for x in range(5)])
axes.set_xlim(0, 4)
axes.set_xlabel('axe des x')
axes.xaxis.set_ticks(range(5))
axes.xaxis.set_ticklabels(['x=0', 'x=1', 'x=2', 'x=3', 'x=4'])
axes.xaxis.set_ticks_position('bottom')
axes.xaxis.set_label_position('top')
axes.yaxis.set_tick_params(direction = 'out', length = 20, width = 5,
color = 'red', labelsize = 20, pad = 20,
labelcolor = 'violet', right = True, left = True)
axes = figure.add_axes([0.3, 0.5, 0.3, 0.3])
axes.patch.set_color('lightyellow')
axes.plot(range(5), range(5))
axes.xaxis.set_ticks(range(5))
axes.xaxis.set_ticklabels(map(lambda x: 'a' + str(x), range(5)))
axes.set_yticks([0, 2, 4])
axes.set_yticks([1, 3], minor = True)
axes.yaxis.set_ticklabels(['1', '3'], minor = True)
axes.yaxis.set_tick_params(which = 'major', length = 15, width = 3,
color = 'green', labelsize = 20, labelcolor = 'violet')
axes.yaxis.set_tick_params(which = 'minor', length = 10, width = 1,
color = 'green', labelsize = 10, labelcolor = 'violet')
axes.yaxis.grid(True, color = 'orange', linewidth = 1, linestyle = 'dashed')
axes.yaxis.grid(True, which = 'minor', color = 'orange',
linewidth = 1, linestyle = 'dotted')
Pour inverser le sens d'un axe, par exemple avoir l'axe des y qui pointe vers le bas : pyplot.gca().invert_yaxis()
Configuration de la visibilité des axes :
- axes.set_frame_on(False) : supprime la boîte carré qui entoure le graphe, mais pas les graduations (ticks et valeurs).
- axes.yaxis.tick_left() : n'affiche des ticks que l'axe de gauche (même chose avec yaxis.tick_right(), xaxis.tick_bottom() et xaxis.tick_top()).
- pyplot.gca().xaxis.set_ticks_position('top') : pour avoir des ticks sur l'axe horizontal du haut.
- axes.xaxis.set_visible(False) : supprime les ticks et les valeurs sur les axes, en conservant l'axe.
- axes.spines['top'].set_visible(False) : pour enlever le trait supérieur de la boîte entourant le graphe (left, right, top, bottom pour les 4 côtés)
- si on veut tracer l'axe des y seulement d'un côté, il faut le faire à la main, en rajoutant une ligne (voir l'exemple juste après).
Exemple de changement de la visiblité des axes
figure = pyplot.figure()
axes = figure.add_subplot(111)
axes.scatter(range(5), [x ** 2 for x in range(5)], s = 50)
axes.set_frame_on(False)
axes.yaxis.tick_left()
axes.xaxis.set_visible(False)
(xmin, xmax) = axes.xaxis.get_view_interval()
(ymin, ymax) = axes.yaxis.get_view_interval()
axes.add_artist(pyplot.Line2D((xmin, xmin), (ymin, ymax),
color = 'magenta', linewidth = 3))
axes.add_artist(pyplot.Line2D((xmin, xmax), (ymin, ymin),
color = 'cyan', linewidth = 5))
Marges dans les graduations :
- attention : ce ne sont pas les marges autour du graphe, ce sont les marges autour des valeurs extrèmes dans le graphe (voir l'exemple parlant ci-dessous). Pour fixer les marges des graphes, utiliser subplots_adjust (à chercher sur le site).
- pyplot.margins() : renvoie le tuple de marges selon les axes x et y. Ce sont des valeurs entre 0 et 1 et le défaut dépend du type de graphe.
- pyplot.margins(0, 0.5) : indique la marge à utiliser : valeurs extrèmes juste au bord sur l'axe des x et 50% d'espace de chaque côté des valeurs extrèmes sur l'axe des y.
- axes.margins(0, 0.5) : formulation objet avec l'objet Axes.
Exemple avec la formulation objet :
figure = pyplot.figure()
axes = figure.add_subplot(2, 1, 1)
axes.scatter(range(5), [x ** 2 for x in range(5)], s = 50, color = 'blue')
axes.margins(1, 0.5)
axes = figure.add_subplot(2, 1, 2)
axes.scatter(range(5), [x ** 2 for x in range(5)], s = 50, color = 'red')
axes.margins(0, 0)
Pour changer la taille du label : myText = pyplot.xlabel('my label); myText.set_fontsize(16)
Pour changer la taille de la fonte (police) de graduation de l'axe des x :
for tickLabel in pyplot.gca().xaxis.get_ticklabels():
tickLabel.set_fontsize(8)
Pour faire tourner les étiquettes de 90 degrés : pyplot.setp(ax.get_xticklabels(), rotation = 90)
Pour changer le background de certains ticks :
for tickLabel in pyplot.gca().xaxis.get_ticklabels():
if tickLabel.get_text() in ['A', 'B', C']:
tickLabel.set_backgroundcolor('yellow')
Pour imposer d'avoir au maxmimm 8 ticks avec un label : pyplot.gca().xaxis.set_major_locator(matplotlib.ticker.MaxNLocator(8))
pyplot.gca().set_aspect(aspect = 'equal') : même échelle sur les 2 axes.
Pour avoir sur la même figure 2 graphes avec 2 échelles différentes sur l'axe des y et partageant leur axe des x, utiliser twinx() :
pl = pyplot.plot([1, 4, 3, 7, 8], color = 'blue')
pyplot.legend(pl, ['blue'])
ax2 = pyplot.gca().twinx()
pl2 = ax2.plot([80, 70, 30, 40, 10], color = 'red')
pyplot.legend(pl2, ['red'])
utiliser twiny pour un axe des y commun.
Locators : permet d'indiquer où placer les graduations :
- Le principe est de faire pour les graduation qui ont un nombre affiché : pyplot.gca().xaxis.set_major_locator(myLocator) où myLocator est un objet qui dérive de la classe Locator
- pour les graduations intermédiaires sans nombre affiché : pyplot.gca().xaxis.set_minor_locator(myLocator)
- matplotlib.ticker.MultipleLocator(2) : graduation tous les 2 unités.
- matplotlib.ticker.FixedLocator([0, 4, 5, 10]) : graduation aux positions 0, 4, 5 et 10
- matplotlib.ticker.LinearLocator(5) : 5 graduations régulièrement espacées entre le min et le max des valeurs affichées (les valeurs aux graduations ne sont pas rondes)
- matplotlib.ticker.MaxNLocator(5) : au plus 5 ticks, de façon à ce que les valeurs soient "agréables"
- matplotlib.ticker.MaxNLocator('auto') ou de manière équivalente matplotlib.ticker.AutoLocator() : détermine automatiquement le nombre de ticks
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert