L'ajout de légende au-dessous de l'axe des X pour un nuage de points à l'aide de matplotlib
Je suis assez nouveau à python et à la bibliothèque matplotlib. J'ai créé un nuage de points à l'aide de matplotlib et maintenant, je souhaite ajouter de la légende un peu en dessous de l'axe des abscisses. C'est mon code:
from matplotlib import pyplot as plt
import numpy as np
from pylab import *
file = open('distribution.txt', 'r')
txt="I need the caption to be present a little below X-axis"
x=[]
y=[]
for line in file:
new=line.rstrip()
mystring=new.split("\t")
x.append(mystring[0])
y.append(mystring[1])
fig = plt.figure()
ax1 = fig.add_axes((0.1,0.4,0.8,0.5))
ax1.set_title("This is my title")
ax1.set_xlabel('X-axis')
ax1.set_ylabel('Y-axis')
ax1.scatter(x,y, c='r')
fig.text(.05,.05,txt)
plt.xlim(0, 1.05)
plt.ylim(0, 2.5)
plt.show()
Comme vous pouvez le voir dans l'image de ma légende est en dessous du nuage de points, est-il un moyen de l'amener exactement en-dessous de l'axe des X? Aussi mon nuage de points semble rectangulaires, est-il un moyen de le rendre carré comme?
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme:
pourrait fonctionner. Rendre cela plus facile à faire est sur le radar pour la mpl en amont, mais nous sommes toujours à la recherche de quelqu'un pour le faire.
Vous pouvez simplement utiliser
figtext
. Vous pouvez également modifier la valeur de x et de y-axes que vous le souhaitez.Tout d'abord, je me sens bizarre de poster une réponse contre le co-lead developer de matplotlib. Évidemment, @tacaswell sait matplotlib beaucoup mieux que je ne le sera jamais. Mais dans le même temps, sa réponse n'était pas assez dynamique pour moi. J'avais besoin d'une légende qui serait toujours en fonction de la position de la
xlabel
, et ne pas simplement utiliser les annotations de texte.J'ai considéré simplement en changeant le
xlabel
pour ajouter un saut de ligne et le texte de la légende, mais ce ne serait pas de différencier clairement la légende, et vous ne pouvez pas faire des choses comme changer la taille du texte ou de le faire en italique dans le milieu d'une chaîne de texte.J'ai résolu ce problème en utilisant matplotlib TeX de capacités. Voici ma solution:
J'ai fait la même chose avec l'aléatoire nuage de points à partir de tacaswell réponse, et voici mon résultat:
Un avertissement: si vous tordre de prendre une entrée variables de chaîne, les chaînes peuvent ne pas être correctement échappé pour une utilisation avec TeX. S'échapper du code LaTeX est déjà couvert sur un Débordement de Pile à https://stackoverflow.com/a/25875504/1404311 . J'ai utilisé directement, et pourrait ensuite prendre arbitraire xlabels et de légendes.
Une solution simple que j'ai utilisé quand je ne pouvais pas comprendre comment le faire d'une manière qui a été conçu...si cela fait sens, était de simplement ajouter de nouvelles lignes à la xlabel plt.xlabel("xaxis label\n\n\n\ncaption") Ce met juste la légende d'un couple de nouvelles lignes en vertu de l'axe x, qui la fait ressembler à une légende, même pensé que c'est vraiment une partie de la xaxis étiquette
figtext
, j'ai aussi appris que\n
dansxlabel
œuvres. Merci de poster ici.