Estoy tratando de usar tanto ax.set_title() como plt.suptitle() para incorporar un título y un subtítulo a un gráfico, pero los dos parecen no compartir la misma alineación. Por ejemplo, lo siguiente:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

cats = ('One', 'Two')
vals = (12, 4) 

ax.barh(cats, vals, align='center')
plt.suptitle('Title')
ax.set_title('Title')
plt.show()

Nos da los siguientes títulos desalineados:

Misaligned titles with short y labels

¿Cómo puedo hacer que estos dos títulos se alineen correctamente? Pensé que podría tener algo que ver con ax.title alineándose con el eje y plt.suptitle alineándose con la figura, pero probar una etiqueta y mucho más larga no parece afectar el desplazamiento:

fig, ax = plt.subplots()

cats = ('One million tiny engines running at one hundred miles per hour', 'Two')
vals = (12, 4) 

ax.barh(cats, vals, align='center')
plt.suptitle('Title')
ax.set_title('Title')
plt.show()

Misaligned titles with long y label

1
asongtoruin 7 oct. 2019 a las 22:07

3 respuestas

La mejor respuesta

Matplotlib alinea el título de la figura y el título de la subtrama . Puedes mover manualmente el título usando fig.subplotpars:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

cats = ('One', 'Two')
vals = (12, 4) 

# Mid point of left and right x-positions
mid = (fig.subplotpars.right + fig.subplotpars.left)/2

ax.barh(cats, vals, align='center')
plt.suptitle('Title',x=mid)
ax.set_title('Title')
plt.show()

Fixed title

¡Disfrutar!

3
asongtoruin 7 oct. 2019 a las 20:01

Si realmente no necesitas subtitle

fig, ax = plt.subplots()

cats = ('One million tiny engines running at one hundred miles per hour', 'Two')
vals = (12, 4) 

ax.barh(cats, vals, align='center')
ax.set_title('Title\nTitle')
plt.show()
0
Jody Klymak 7 oct. 2019 a las 21:59

Sé que esta no es la respuesta perfecta y, básicamente, una nueva publicación de mi comentario, pero aquí no pasa nada:

fig, ax = plt.subplots()

cats = ('hour', 'Two')
vals = (12, 4) 
ax.barh(cats, vals, align='center')
plt.figtext(.5,.95,'Foo Bar', fontsize=18, ha='center')
plt.figtext(.5,.9,'lol bottom text',fontsize=10,ha='center')
plt.show()

Sin embargo, debe ajustar manualmente los valores .95 y .9 dependiendo de los tamaños de fuente.

1
J.Doe 7 oct. 2019 a las 19:41
58275694