Saltar al contenido

¿Cómo posicionar el título?

Solución:

1. ¿Qué significan las coordenadas de las figuras?

Las coordenadas de la figura van de 0 a 1, donde (0,0) es la esquina inferior izquierda y (1,1) es la esquina superior derecha. Una coordenada de y=1.05 está, por tanto, ligeramente fuera de la figura.

ingrese la descripción de la imagen aquí

2. ¿Cuál es el efecto sobre el tamaño de la figura al especificar y para suptitulo?

Especificando y a suptitle no tiene ningún efecto en el tamaño de la figura.

3a. ¿Cómo ajusto manualmente el tamaño y el espaciado de la figura para agregar un título de figura por panel y un subtítulo para toda la figura?

Primero, uno no agregaría un salto de línea adicional. Es decir, si desea tener 2 líneas, no use 3 saltos de línea (n). Luego, se pueden ajustar los parámetros de la subtrama como se desee para dejar espacio para los títulos. P.ej fig.subplots_adjust(top=0.8) y usa un y <= 1 para que el título esté dentro de la figura.

import matplotlib.pyplot as plt
import numpy as np

data = np.random.random(size=100)
fig, axes = plt.subplots(2, 2, figsize=(10, 5))
fig.subplots_adjust(top=0.8)

axes[0,0].plot(data)
axes[0,0].set_title("n".join(["this is a really long title"]*2))
axes[0,1].plot(data)
axes[1,1].plot(data)

fig.suptitle("n".join(["a big long suptitle that runs into the title"]*2), y=0.98)

plt.show()

ingrese la descripción de la imagen aquí

3b. … manteniendo el tamaño de cada hacha en la figura?

Mantener el tamaño de los ejes y aún tener suficiente espacio para los títulos solo es posible cambiando el tamaño general de la figura.

Esto podría verse de la siguiente manera, donde definimos una función make_space_above que toma la matriz de ejes como entrada, así como el margen superior recién deseado en unidades de pulgadas. Entonces, por ejemplo, llega a la conclusión de que necesita 1 pulgada de margen en la parte superior para alojar sus títulos:

import matplotlib.pyplot as plt
import numpy as np

data = np.random.random(size=100)
fig, axes = plt.subplots(2, 2, figsize=(10, 5), squeeze = False)

axes[0,0].plot(data)
axes[0,0].set_title("n".join(["this is a really long title"]*2))
axes[0,1].plot(data)
axes[1,1].plot(data)

fig.suptitle("n".join(["a big long suptitle that runs into the title"]*2), y=0.98)


def make_space_above(axes, topmargin=1):
    """ increase figure size to make topmargin (in inches) space for 
        titles, without changing the axes sizes"""
    fig = axes.flatten()[0].figure
    s = fig.subplotpars
    w, h = fig.get_size_inches()

    figh = h - (1-s.top)*h  + topmargin
    fig.subplots_adjust(bottom=s.bottom*h/figh, top=1-topmargin/figh)
    fig.set_figheight(figh)


make_space_above(axes, topmargin=1)    

plt.show()

ingrese la descripción de la imagen aquí

(izquierda: sin llamar make_space_above; derecha: con llamada a make_space_above(axes, topmargin=1))

Respuesta corta

Para aquellos que vienen de Google para ajustar la posición del título en una matriz de dispersión, simplemente puede configurar el y parámetro a un valor ligeramente inferior a 1:

plt.suptitle('My Title', y=0.92)

… o use restricted_layout:

import matplotlib.pyplot as plt
import numpy as np

data = np.random.random(size=100)
f, a = plt.subplots(2, 2, figsize=(10, 5), constrained_layout=True)

a[0,0].plot(data)
a[0,0].set_title("this is a really long titlen"*2)
a[0,1].plot(data)
a[1,1].plot(data)

plt.suptitle("a big long suptitle that runs into the titlen"*2);

ingrese la descripción de la imagen aquí

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *