pyplot legends font matplotlib title legend subplot

legends - Matplotlib: leyenda global y título aparte de las subtramas



subplot python (4)

Además de la respuesta más simple , también podría querer cambiar las subparcelas hacia abajo. Aquí hay un MWE en estilo OOP:

import matplotlib.pyplot as plt fig = plt.figure() st = fig.suptitle("suptitle", fontsize="x-large") ax1 = fig.add_subplot(311) ax1.plot([1,2,3]) ax1.set_title("ax1") ax2 = fig.add_subplot(312) ax2.plot([1,2,3]) ax2.set_title("ax2") ax3 = fig.add_subplot(313) ax3.plot([1,2,3]) ax3.set_title("ax3") fig.tight_layout() # shift subplots down: st.set_y(0.95) fig.subplots_adjust(top=0.85) fig.savefig("test.png")

da:

Empecé con matplot y administré algunas tramas básicas, pero ahora me resulta difícil descubrir cómo hacer algunas cosas que necesito ahora :(

Mi verdadera pregunta es cómo colocar un título global y una leyenda global en una figura con subtramas.

Estoy haciendo subtramas de 2x3 donde tengo muchos gráficos diferentes en varios colores (alrededor de 200). Para distinguir (la mayoría) de ellos escribí algo así como

def style(i, total): return dict(color=jet(i/total), linestyle=["-", "--", "-.", ":"][i%4], marker=["+", "*", "1", "2", "3", "4", "s"][i%7]) fig=plt.figure() p0=fig.add_subplot(321) for i, y in enumerate(data): p0.plot(x, trans0(y), "-", label=i, **style(i, total)) # and more subplots with other transN functions

(¿Alguna idea sobre esto? :)) Cada subtrama tiene la misma función de estilo.

Ahora estoy tratando de obtener un título global para todas las subtramas y también una leyenda global que explica todos los estilos. También necesito hacer que la fuente sea pequeña para que quepan todos los 200 estilos (no necesito estilos completamente únicos, pero al menos algunos intentos)

¿Alguien puede ayudarme a resolver esta tarea?


Para las etiquetas de leyenda, puedes usar algo como a continuación. Legendlabels son las líneas de trama guardadas. modFreq es donde el nombre de las etiquetas reales corresponde a las líneas de la trama. Entonces el tercer parámetro es la ubicación de la leyenda. Por último, puede pasar cualquier argumento como lo he hecho aquí, pero principalmente necesita los tres primeros. Además, se supone que debes hacerlo si configuras las etiquetas correctamente en el comando de trazado. Para simplemente llamar a leyenda con el parámetro de ubicación y encuentra las etiquetas en cada una de las líneas. He tenido mejor suerte haciendo mi propia leyenda de la siguiente manera. Parece que funciona en todos los casos en los que parece que nunca ha ido al revés. Si no entiendes, házmelo saber:

legendLabels = [] for i in range(modSize): legendLabels.append(ax.plot(x,hstack((array([0]),actSum[j,semi,i,semi])), color=plotColor[i%8], dashes=dashes[i%4])[0]) #linestyle=dashs[i%4] legArgs = dict(title=''AM Templates (Hz)'',bbox_to_anchor=[.4,1.05],borderpad=0.1,labelspacing=0,handlelength=1.8,handletextpad=0.05,frameon=False,ncol=4, columnspacing=0.02) #ncol,numpoints,columnspacing,title,bbox_transform,prop leg = ax.legend(tuple(legendLabels),tuple(modFreq),''upper center'',**legArgs) leg.get_title().set_fontsize(tick_size)

También puede usar el pie para cambiar el tamaño de las fuentes o casi cualquier parámetro de la leyenda.

El título global como se indica en el comentario anterior se puede hacer agregando texto por el enlace proporcionado: matplotlib.sourceforge.net/examples/pylab_examples/…

f.text(0.5,0.975,''The new formatter, default settings'',horizontalalignment=''center'', verticalalignment=''top'')


suptitle parece ser el camino a seguir, pero por lo que vale, la figure tiene una propiedad transFigure que puedes usar:

fig=figure(1) text(0.5, 0.95, ''test'', transform=fig.transFigure, horizontalalignment=''center'')


Título global : en las versiones más nuevas de matplotlib, se puede usar Figure.suptitle() .

from pylab import * fig = gcf() fig.suptitle("Title centered above all subplots", fontsize=14)