matplotlib: alignement du titre de la légende

dans matplotlib, Comment puis-je ajuster l'alignement du titre de la légende? Il est toujours centré, mais j'ai besoin qu'il soit aligné à gauche avec la boîte de légende. J'ai essayé de changer l'alignement du titre du Texte de l'artiste qui n'a aucun effet. Voir l'exemple suivant pour plus de détails:

from pylab import *

x = linspace(0, 1)
plot(x, x, label="1")
plot(x, x**2, label="2")
plot(x, x**3, label="3")
plot(x, sqrt(x), label="square root")

l = legend(title="Title", loc="best")
l.get_title().set_ha("left")               # <== does not work

show()

la question se résume à quoi et qui contrôle le point d'ancrage de l'alignement des titres? Changer l'alignement en "droit" ou "centre" a un effet notable. Deuxième observation: pour les longues chaînes de titre, le point d'ancrage se déplace vers la bordure gauche de la boîte de légende ...

18
demandé sur Erwin411 2013-03-26 17:13:40

2 réponses

vous pouvez aligner la zone de légende complèteleg._legend_box.align. Cela aligne tout à l'intérieur de la boîte de légende, mais l'effet est celui désiré pour avoir le titre de chaque côté de la boîte au lieu du centre.

  • aligné à Gauche

    leg = plt.legend(title="Title")
    leg._legend_box.align = "left"
    

    enter image description here

  • aligné à Droite

    leg = plt.legend(title="Title")
    leg._legend_box.align = "right"
    

    enter image description here

9
répondu ImportanceOfBeingErnest 2017-06-19 00:04:17

je pense que vous avez besoin de déplacer l' Text objet, à l'aide de la set_position((x, y)) méthode. Les unités de x et y sont des pixels, donc vous devrez expérimenter avec quelles valeurs semblent justes, ou utiliser un Transform. Je ne suis pas sûr de savoir quelle combinaison de Transforms pourrait être très utile.

bref, quelque chose comme ça pourrait marcher:

l.get_title().set_position((-10, 0)) # -10 is a guess
5
répondu Yann 2015-08-06 06:36:24