Esta es la contestación más acertada que te podemos brindar, sin embargo mírala detenidamente y analiza si se adapta a tu trabajo.
Solución:
Puedes usar text
.
text(x, y, s, fontsize=12)
text
las coordenadas se pueden dar en relación con el eje, por lo que la posición de su texto será independiente del tamaño de la trama:
La transformación predeterminada especifica que el texto está en coordenadas de datos; alternativamente, puede especificar texto en coordenadas de eje (0,0 es la parte inferior izquierda y 1,1 es la parte superior derecha). El siguiente ejemplo coloca el texto en el centro de los ejes:
text(0.5, 0.5,'matplotlib',
horizontalalignment='center',
verticalalignment='center',
transform = ax.transAxes)
Evitar que el texto interfiera con cualquier punto de su dispersión es más difícil afaik. El método más fácil es establecer y_axis (ymax en ylim((ymin,ymax))
) a un valor un poco más alto que la coordenada y máxima de sus puntos. De esta forma siempre tendrás este espacio libre para el texto.
EDITAR: aquí tienes un ejemplo:
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]:
In [21]: text(0.1, 0.9,'matplotlib', ha='center', va='center', transform=ax.transAxes)
Out[21]:
In [22]:
Los parámetros ha y va establecen la alineación de su texto en relación con el punto de inserción. es decir. ha=’left’ es un buen conjunto para evitar que un texto largo se salga del eje izquierdo cuando el marco se reduce (se hace más estrecho) manualmente.
Una solución sería utilizar el plt.legend
función, incluso si no desea una leyenda real. Puede especificar la ubicación del cuadro de leyenda mediante el loc
término clave. Se puede encontrar más información en este sitio web, pero también he incluido un ejemplo que muestra cómo colocar una leyenda:
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)
Tenga en cuenta que porque loc=2
, la leyenda está en la esquina superior izquierda de la gráfica. Y si el texto se superpone con la trama, puede hacerlo más pequeño usando legend.fontsize
que luego hará que la leyenda sea más pequeña.
matplotlib
es algo diferente de cuando se publicó la respuesta originalmatplotlib.pyplot.text
matplotlib.axes.Axes.text
import matplotlib.pyplot as plt
plt.figure(figsize=(6, 6))
plt.text(0.1, 0.9, 'text', size=15, color='purple')
# or
fig, axe = plt.subplots(figsize=(6, 6))
axe.text(0.1, 0.9, 'text', size=15, color='purple')
Salida de ambos
- De matplotlib: diseño de texto preciso
- Puede diseñar con precisión el texto en datos o coordenadas de ejes.
import matplotlib.pyplot as plt
# Build a rectangle in axes coords
left, width = .25, .5
bottom, height = .25, .5
right = left + width
top = bottom + height
ax = plt.gca()
p = plt.Rectangle((left, bottom), width, height, fill=False)
p.set_transform(ax.transAxes)
p.set_clip_on(False)
ax.add_patch(p)
ax.text(left, bottom, 'left top',
horizontalalignment='left',
verticalalignment='top',
transform=ax.transAxes)
ax.text(left, bottom, 'left bottom',
horizontalalignment='left',
verticalalignment='bottom',
transform=ax.transAxes)
ax.text(right, top, 'right bottom',
horizontalalignment='right',
verticalalignment='bottom',
transform=ax.transAxes)
ax.text(right, top, 'right top',
horizontalalignment='right',
verticalalignment='top',
transform=ax.transAxes)
ax.text(right, bottom, 'center top',
horizontalalignment='center',
verticalalignment='top',
transform=ax.transAxes)
ax.text(left, 0.5 * (bottom + top), 'right center',
horizontalalignment='right',
verticalalignment='center',
rotation='vertical',
transform=ax.transAxes)
ax.text(left, 0.5 * (bottom + top), 'left center',
horizontalalignment='left',
verticalalignment='center',
rotation='vertical',
transform=ax.transAxes)
ax.text(0.5 * (left + right), 0.5 * (bottom + top), 'middle',
horizontalalignment='center',
verticalalignment='center',
transform=ax.transAxes)
ax.text(right, 0.5 * (bottom + top), 'centered',
horizontalalignment='center',
verticalalignment='center',
rotation='vertical',
transform=ax.transAxes)
ax.text(left, top, 'rotatednwith newlines',
horizontalalignment='center',
verticalalignment='center',
rotation=45,
transform=ax.transAxes)
plt.axis('off')
plt.show()
Puedes proteger nuestra publicación escribiendo un comentario o valorándolo te damos la bienvenida.