[PYTHON] notes de mise en page de la légende matplotlib

Afficher la légende, sélectionner la courbe

Si vous n'incluez aucune option dans ʻax.legend () `.

python


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 101)
y1 = np.sin(x * np.pi)
y2 = np.cos(x * 2 * np.pi) * 0.5

fig = plt.figure()
ax = fig.add_subplot(111)

#Spécifiez le nom de la courbe utilisé pour la légende avec l'option d'étiquette
ax.plot(x, y1, c="r", label="$\mathrm{sin}(x)$")
ax.plot(x, y2, c="b", label="$0.5 \mathrm{cos}(2x)$")
ax.grid(axis='both')

#Afficher la légende
ax.legend()

image.png

La même figure que ci-dessus est dessinée en utilisant les informations de courbe et les informations d'étiquette acquises par ʻax.get_legend_handles_labels () `, comme indiqué ci-dessous.

python


ax.plot(x, y1, c="r", label="$\mathrm{sin}(x)$")
ax.plot(x, y2, c="b", label="$0.5 \mathrm{cos}(2x)$")
ax.grid(axis='both')

#Une liste d'objets courbes avec étiquette spécifiée pour les mains,
#labs contient une liste d'étiquettes correspondantes
hans, labs = ax.get_legend_handles_labels()

#Afficher la légende
ax.legend(handles=hans, labels=labs)

Les informations de courbe et les informations d'étiquette acquises par ʻax.get_legend_handles_labels () `peuvent également être spécifiées comme suit.

python


l1 = ax.plot(x, y1, c="r")
l2 = ax.plot(x, y2, c="b")
ax.grid(axis='both')

#Afficher la légende
#Puisque l1 et l2 sont de type liste,+Rejoindre un opérateur
#Dans ce cas, les poignées peuvent être omises.
ax.legend(handles=l1+l2, labels=["$\mathrm{sin}(x)$", "$0.5 \mathrm{cos}(2x)$"])

Par exemple, si vous souhaitez inverser l'ordre des légendes, procédez comme suit.

python


x = np.linspace(-3,3,101)

fig = plt.figure(figsize=(10,5))
#Figure de gauche
ax1 = fig.add_subplot(121)
#Figure droite
ax2 = fig.add_subplot(122)
for i in np.linspace(-1,1,5):
    ax1.plot(x, np.sin(x)+i, label=str(i))
    ax2.plot(x, np.sin(x)+i, label=str(i))

#Obtenir des informations sur la légende
hans, labs = ax1.get_legend_handles_labels()
#Affichage de la légende à gauche
ax1.legend(handles=hans, labels=labs, fontsize=8)
#Affichage de la légende à droite (ordre inverse)
ax2.legend(handles=hans[::-1], labels=labs[::-1], fontsize=8)

image.png

Disposition de la légende

option loc

Les positions dans l'axe sont définies pour les nombres de 1 à 9. Vous pouvez également spécifier la chaîne de caractères correspondante ("en haut à droite", "en haut à gauche", etc.).

python


fig = plt.figure(figsize=(10,10))
for i in range(1,9+1):
    ax = fig.add_subplot(330+i)

    #Même si vous videz la liste nécessaire au dessin
    #Le style de la courbe est défini et reflété dans la légende.
    ax.plot([], [], c="r", label="sin")
    ax.plot([], [], c="b", label="cos")
    #Ajouter du texte vert (centré sur l'axe)
    ax.text(0.5, 0.5, "loc={}".format(i),
            c="g", fontsize=30,
            horizontalalignment="center",
            verticalalignment="center", )
    #Dessin d'une légende avec loc spécifié
    ax.legend(loc=i)

image.png

Dessin en dehors de l'axe (bbox_to_anchor), en changeant le nombre de colonnes ( ncol)

Pour faciliter la compréhension, j'ai ajouté un marqueur vert aux coordonnées spécifiées par bbox_to_anchor.

python


fig = plt.figure(figsize=(10,10))

#en haut à gauche
ax = fig.add_subplot(321)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Dessinez une légende en haut de l'axe
#Point de référence en bas au centre de la fenêtre de légende
#Les coordonnées du point de référence sont le centre de l'axe dans la direction horizontale et légèrement au-dessus du côté supérieur de l'axe dans la direction verticale.
#Appliquer un affichage à 2 colonnes avec ncol
ax.legend(loc="lower center", bbox_to_anchor=(0.5, 1.02,), borderaxespad=0, ncol=2)
# bbox_to_Ajouter un marqueur vert à la position d'ancrage
# clip_on=Permet de dessiner en dehors de l'axe avec False
# transform=ax.Dans transAxes, les coordonnées inférieure gauche et supérieure droite de l'axe sont(0,0)(1,1)Appliquez le système qui devient.
circle = plt.Circle((0.5, 1.02,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

#En haut à droite
ax = fig.add_subplot(322)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Dessinez une légende dans le coin supérieur droit de l'axe
#Point de référence en haut à gauche de la fenêtre de légende
#Les coordonnées du point de référence sont légèrement à droite du côté droit de l'axe dans le sens horizontal et du côté supérieur de l'axe dans le sens vertical.
ax.legend(loc="upper left", bbox_to_anchor=(1.02, 1.0,), borderaxespad=0)
circle = plt.Circle((1.02, 1.0,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

#Milieu droit
ax = fig.add_subplot(324)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Dessinez une légende au milieu à droite de l'axe
#Point de référence au milieu à gauche de la fenêtre de légende
#Les coordonnées du point de référence sont légèrement à droite du côté droit de l'axe dans la direction horizontale et le centre de l'axe dans la direction verticale.
ax.legend(loc="center left", bbox_to_anchor=(1.02, 0.5,), borderaxespad=0)
circle = plt.Circle((1.02, 0.5,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

#En bas à gauche
ax = fig.add_subplot(325)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Dessinez une légende en bas de l'axe
#Point de référence au centre de la fenêtre de légende
#Les coordonnées du point de référence sont le centre de l'axe dans la direction horizontale et plus que le côté inférieur de l'axe dans la direction verticale.
ax.legend(loc="upper center", bbox_to_anchor=(0.5, -0.1,), borderaxespad=0, ncol=2)
circle = plt.Circle((0.5, -0.1,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

#En bas à droite
ax = fig.add_subplot(326)
ax.plot([], [], c="r", label="sin")
ax.plot([], [], c="b", label="cos")
#Dessinez une légende en bas à droite de l'axe
#Point de référence en bas à gauche de la fenêtre de légende
#Les coordonnées du point de référence sont légèrement à droite du côté droit de l'axe dans le sens horizontal et du côté inférieur de l'axe dans le sens vertical.
#Appliquer un affichage à 2 colonnes avec ncol
ax.legend(loc="lower left", bbox_to_anchor=(1.02, 0.0,), borderaxespad=0)
circle = plt.Circle((1.02, 0.0,), 0.01, color='g', clip_on=False, transform=ax.transAxes)
ax.add_artist(circle)

image.png

Si vous passez de borderaxespad = 0 dans le code ci-dessus à borderaxespad = 1, ce sera comme indiqué dans la figure ci-dessous. Ce nombre est défini comme une valeur relative avec le nombre de points spécifié par font-size comme 1.

image.png

Légende du graphique à 2 axes

Combinez les deux ci-dessus.

python


x = np.linspace(-3,3,101)
y1 = np.sin(x * np.pi)
y2 = np.cos(x * 2 * np.pi) * 0.5
z  = np.tan(x * np.pi)

fig = plt.figure(figsize=(10,5))

#Figure de gauche
#Dessinez la légende de chaque axe indépendamment
ax = fig.add_subplot(131)
ax.plot(x, y1, c="r", label="$\mathrm{sin}(x)$")
ax.plot(x, y2, c="b", label="$0.5 \mathrm{cos}(2x)$")
ax.grid(axis='both')
#Affichage de la légende du graphique du 1er axe
ax.legend(loc="upper left", bbox_to_anchor=(1.2, 1.0))
#2ème axe
ax2 = ax.twinx()
ax2.plot(x, z, "g", marker="o", lw=0, ms=2, label = '$\mathrm{tan}(x)$')
ax2.set_ylim(-3,3)
#Affichage de la légende du graphique sur le deuxième axe
ax2.legend(loc="lower left", bbox_to_anchor=(1.2, 0.0))

#Figure droite
#Intégrer la légende des deux axes
ax = fig.add_subplot(133)
ax.plot(x, y1, c="r", label="$\mathrm{sin}(x)$")
ax.plot(x, y2, c="b", label="$0.5 \mathrm{cos}(2x)$")
ax.grid(axis='both')
#Conservation des informations de la légende du 1er axe
hans1, labs1 = ax.get_legend_handles_labels()
#2ème axe
ax2 = ax.twinx()
ax2.plot(x, z, "g", marker="o", lw=0, ms=2, label = '$\mathrm{tan}(x)$')
ax2.set_ylim(-3,3)
#Rétention des informations de légende de l'Axe 2
hans2, labs2 = ax2.get_legend_handles_labels()
#Afficher la légende
ax.legend(hans1+hans2, labs1+labs2, loc="upper left", bbox_to_anchor=(1.2, 1.0))

image.png

Recommended Posts

notes de mise en page de la légende matplotlib
Légende matplotlib translucide
Remarques sur l'utilisation de matplotlib sur le serveur
Notes Jupyter, numpy, matplotlib utilisées dans les rapports