xticks xlabel with outside found font example python plot matplotlib

python - with - set xlabel matplotlib



Poniendo texto en la esquina superior izquierda de la trama matplotlib (2)

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 de su texto será independiente del tamaño de la gráfica:

La transformación predeterminada especifica que el texto está en coords de datos, alternativamente, puede especificar texto en coordenadas de eje (0,0 es inferior izquierda y 1.1 es superior derecha). El siguiente ejemplo coloca 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)) ) en 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 [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]:

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 salga del eje izquierdo cuando el marco se reduce (se estrecha) manualmente.

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

Me gustaría hacer esto sin conocer idealmente la escala del diagrama de dispersión que se traza, por ejemplo, ya que cambiará del conjunto de datos al conjunto de datos. Solo quiero que el texto esté más o menos en la esquina superior izquierda o más o menos en la esquina superior derecha. Con el posicionamiento del tipo de leyenda, no debe superponerse con ningún punto de gráfico de dispersión de todos modos.

¡Gracias!


Una solución sería usar la función plt.legend , incluso si no desea una leyenda real. Puede especificar la ubicación del cuadro de leyenda utilizando el loc keyterm. Se puede encontrar más información en este sitio web, pero también incluí 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 como loc=2 , la leyenda se encuentra en la esquina superior izquierda de la gráfica. Y si el texto se superpone con la trama, puede hacerlo más pequeño utilizando legend.fontsize , que luego reducirá la leyenda.