Poner texto en la esquina superior izquierda de la gráfica de matplotlib

¿Cómo puedo colocar texto en la esquina superior izquierda (o superior derecha) de una figura de matplotlib, por ejemplo, donde estaría una leyenda superior izquierda, o en la parte superior de la ttwig pero en la esquina superior izquierda? Por ejemplo, si es un plt.scatter (), entonces algo que estaría dentro del cuadrado del scatter, colóquelo en la esquina superior izquierda.

Me gustaría hacer esto sin saber, idealmente, la escala del diagtwig de dispersión que se traza, por ejemplo, ya que cambiará de conjunto de datos a conjunto de datos. Solo quiero que el texto sea más o menos en la parte superior izquierda, o aproximadamente en la parte superior derecha. Con el posicionamiento de tipo leyenda, no debería superponerse con ningún punto de trazado de dispersión de todos modos.

¡Gracias!

Puedes usar text .

 text(x, y, s, fontsize=12) 

text coordenadas del text se pueden dar en relación con el eje, por lo que la posición del texto será independiente del tamaño de la ttwig:

La transformación predeterminada especifica que el texto está en coords de datos, alternativamente, puede especificar texto en coords 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) 

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

introduzca 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 = ‘izquierda’ es un buen conjunto para evitar que un texto largo salga del eje izquierdo cuando el marco se reduce (se hace más estrecho) manualmente.

Una solución sería utilizar la función plt.legend , incluso si no desea una leyenda real. Puede especificar la ubicación del cuadro de leyenda utilizando el término keyterm. 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 debido a que loc=2 , la leyenda se encuentra en la esquina superior izquierda de la gráfica. Y si el texto se superpone con la ttwig, puede hacerlo más pequeño usando legend.fontsize , que luego hará que la leyenda sea más pequeña.