Saltar al contenido

Poner texto en la esquina superior izquierda de la trama matplotlib

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]:

ingrese la descripción de la imagen aquí

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.fontsizeque luego hará que la leyenda sea más pequeña.

  • matplotlib es algo diferente de cuando se publicó la respuesta original
  • matplotlib.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

ingrese la descripción de la imagen aquí

  • 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()

ingrese la descripción de la imagen aquí

Puedes proteger nuestra publicación escribiendo un comentario o valorándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *