Python Matplotlib figura título se superpone a la etiqueta de ejes cuando se usa twiny

Estoy tratando de trazar dos cantidades separadas en el mismo gráfico usando twiny de la siguiente manera:

fig = figure() ax = fig.add_subplot(111) ax.plot(T, r, 'b-', T, R, 'r-', T, r_geo, 'g-') ax.set_yscale('log') ax.annotate('Approx. sea level', xy=(Planet.T_day*1.3,(Planet.R)/1000), xytext=(Planet.T_day*1.3, Planet.R/1000)) ax.annotate('Geostat. orbit', xy=(Planet.T_day*1.3, r_geo[0]), xytext=(Planet.T_day*1.3, r_geo[0])) ax.set_xlabel('Rotational period (hrs)') ax.set_ylabel('Orbital radius (km), logarithmic') ax.set_title('Orbital charts for ' + Planet.N, horizontalalignment='center', verticalalignment='top') ax2 = ax.twiny() ax2.plot(v,r,'k-') ax2.set_xlabel('Linear speed (ms-1)') show() 

y los datos se presentan bien, pero tengo el problema de que el título de la figura se superpone con las tags de los ejes en el eje x secundario, de modo que es apenas legible (quería publicar un ejemplo de imagen aquí, pero no tengo un Representante suficientemente alto todavía).

Me gustaría saber si hay una forma sencilla de cambiar el título directamente unas decenas de píxeles, para que el gráfico se vea más bonito.

No estoy seguro de si es una característica nueva en las versiones posteriores de matplotlib, pero al menos para 1.3.1, esto es simplemente:

 plt.title(figure_title, y=1.08) 

Esto también funciona para plt.suptitle() , pero no (todavía) para plt.xlabel() , etc.

Olvídese de usar plt.title y coloque el texto directamente con plt.text . A continuación se ofrece un ejemplo exagerado:

 import pylab as plt fig = plt.figure(figsize=(5,10)) figure_title = "Normal title" ax1 = plt.subplot(1,2,1) plt.title(figure_title, fontsize = 20) plt.plot([1,2,3],[1,4,9]) figure_title = "Raised title" ax2 = plt.subplot(1,2,2) plt.text(0.5, 1.08, figure_title, horizontalalignment='center', fontsize=20, transform = ax2.transAxes) plt.plot([1,2,3],[1,4,9]) plt.show() 

introduzca la descripción de la imagen aquí

 ax.set_title('My Title\n', fontsize="15", color="red") plt.imshow(myfile, origin="upper") 

Si coloca '\n' justo después de la cadena de título, la ttwig se dibuja justo debajo del título. Esa podría ser una solución rápida también.

Estaba teniendo un problema con la etiqueta x que se superponía a un título de subplot; esto funcionó para mí:

 import matplotlib.pyplot as plt fig, ax = plt.subplots(2, 1) ax[0].scatter(...) ax[1].scatter(...) plt.tight_layout() . . . plt.show() 

antes de

introduzca la descripción de la imagen aquí

después

introduzca la descripción de la imagen aquí

referencia:

Simplemente use plt.tight_layout() antes de plt.show() . Funciona bien.