Cómo dibujar un rectángulo fuera del marco de la ttwig en Matplotlib

Quiero generar el título de la subfigura en el estilo de la figura seguida:

introduzca la descripción de la imagen aquí

Una casilla gris debe estar debajo del título que se encuentra en la parte superior del punto de dispersión.

Aquí está el código que he probado:

x = random.sample(range(50), 50) y= random.sample(range(50), 50) fig = pyplot.figure() ax = pyplot.subplot(111) ax.scatter(x,y,label='a') ax.set_aspect('equal') ax.set_xlim(0,60) ax.set_ylim(0,60) ax.plot([0,60], [0, 60], color='k', linestyle='-', linewidth=1.25) ax.add_patch(patches.Rectangle((0,60),60, 10,facecolor='silver',linewidth = 0)) TITLE = ax.text(26,61, r'$\mathregular{Title}$',fontsize = 14,zorder = 5,color = 'k') 

El resultado se muestra como:

introduzca la descripción de la imagen aquí

El rectángulo como el cuadro de fondo del título no se puede mostrar en mi resultado

Cualquier consejo o mejor solución son apreciados!

Creo que una mejor manera es usar la opción clip_on = False para el rectángulo :

 import random import matplotlib.pyplot as pyplot x = random.sample(range(50), 50) y= random.sample(range(50), 50) fig = pyplot.figure() ax = pyplot.subplot(111) ax.scatter(x,y,label='a') ax.set_aspect('equal') ax.set_xlim(0,60) ax.set_ylim(0,60) ax.plot([0,60], [0, 60], color='k', linestyle='-', linewidth=1.25) ax.add_patch(pyplot.Rectangle((0,60),60, 10,facecolor='silver', clip_on=False,linewidth = 0)) TITLE = ax.text(26,61, r'$\mathregular{Title}$',fontsize = 14,zorder = 5, color = 'k') pyplot.show() 

Esto produce un rectángulo dibujado fuera de los ejes, sin tener que recurrir a espacios adicionales:

introduzca la descripción de la imagen aquí

Eliminar esta línea:

 ax.add_patch(patches.Rectangle((0,60),60, 10,facecolor='silver',linewidth = 0)) 

Y cambia la última línea agregando bbox :

 TITLE = ax.text(26,62, 'Title',fontsize = 14,zorder = 6, color = 'k', bbox={'facecolor':'silver', 'alpha':0.5, 'pad':4}) 

bbox_example

La única forma que encontré para darle una longitud arbitraria es agregar espacios en blanco.

 TITLE = ax.text(1,62, ' Title ', fontsize = 14,zorder = 6,color = 'k', bbox={'facecolor':'silver', 'alpha':0.5, 'pad':4}) 

bbox_example_2

Para obtener más información sobre bbox, consulte esta pregunta en SO.