Comment puis-je mettre du texte dans le coin supérieur gauche (ou supérieur droit) d'une figure matplotlib, par ex. où serait une légende en haut à gauche, ou en haut de la parcelle mais dans le coin en haut à gauche? Par exemple. Si c'est un plt.scatter (), alors quelque chose qui serait dans le carré du scatter, mis dans le coin le plus en haut à gauche.
J'aimerais faire cela sans connaître idéalement l'échelle du diagramme de dispersion tracé, par exemple, car cela changerait d'un jeu de données à l'autre. Je veux juste que le texte soit approximativement en haut à gauche ou en haut à droite. Avec le positionnement du type de légende, il ne doit de toute façon pas chevaucher les points du diagramme de dispersion.
merci!
Vous pouvez utiliser text
.
text(x, y, s, fontsize=12)
Les coordonnées text
peuvent être données par rapport à l'axe. La position de votre texte sera donc indépendante de la taille du tracé:
La transformation par défaut spécifie que le texte est dans les coordonnées de données. Vous pouvez également spécifier le texte dans les coordonnées d'axe (0,0 en bas à gauche et 1,1 en haut à droite). L'exemple ci-dessous place le texte au centre des axes:
text(0.5, 0.5,'matplotlib',
horizontalalignment='center',
verticalalignment='center',
transform = ax.transAxes)
Empêcher le texte d'interférer avec un point quelconque de votre dispersion est plus difficile. La méthode la plus simple consiste à définir y_axis (ymax dans ylim((ymin,ymax))
) sur une valeur légèrement supérieure à la coordonnée y maximale de vos points. De cette façon, vous aurez toujours cet espace libre pour le texte.
EDIT: ici vous avez un exemple:
In [17]: from pylab import figure, text, scatter, show
In [18]: f = figure()
In [19]: ax = f.add_subplot(111)
In [20]: scatter([3,5,2,6,8],[5,3,2,1,5])
Out[20]: <matplotlib.collections.CircleCollection object at 0x0000000007439A90>
In [21]: text(0.1, 0.9,'matplotlib', ha='center', va='center', transform=ax.transAxes)
Out[21]: <matplotlib.text.Text object at 0x0000000007415B38>
In [22]:
Les paramètres ha et va définissent l'alignement de votre texte par rapport au point d'insertion. c'est à dire. ha = 'left' est un bon jeu pour empêcher un texte long de sortir de l'axe de gauche lorsque le cadre est réduit (rendu plus étroit) manuellement.
Une solution serait d'utiliser le plt.legend
_ fonction, même si vous ne voulez pas de légende. Vous pouvez spécifier l'emplacement de la boîte de légende à l'aide de loc
keyterm. Plus d'informations peuvent être trouvées sur ce site mais j'ai aussi inclus un exemple montrant comment placer une légende:
ax.scatter(xa,ya, marker='o', s=20, c="lightgreen", alpha=0.9)
ax.scatter(xb,yb, marker='o', s=20, c="dodgerblue", alpha=0.9)
ax.scatter(xc,yc marker='o', s=20, c="firebrick", alpha=1.0)
ax.scatter(xd,xd,xd, marker='o', s=20, c="goldenrod", alpha=0.9)
line1 = Line2D(range(10), range(10), marker='o', color="goldenrod")
line2 = Line2D(range(10), range(10), marker='o',color="firebrick")
line3 = Line2D(range(10), range(10), marker='o',color="lightgreen")
line4 = Line2D(range(10), range(10), marker='o',color="dodgerblue")
plt.legend((line1,line2,line3, line4),('line1','line2', 'line3', 'line4'),numpoints=1, loc=2)
Notez que parce que loc=2
, la légende se trouve dans le coin supérieur gauche du graphique. Et si le texte recouvre le tracé, vous pouvez le réduire en utilisant legend.fontsize
, ce qui réduira la légende.