En matplotlib, si aumento el tamaño de los marcadores, el tamaño de las subparcelas se mantendrá sin cambios, pero toda la figura se expandirá.

Por ejemplo:

import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(2, 1)
ax2.set_yticklabels(['a long and big label'], fontsize=26)

enter image description here

Quiero saber cómo configurar los Subplots para ajustar automáticamente su tamaño para acomodar los marcadores para que todo el área se mantenga sin cambios, como lo siguiente:

enter image description here

0
steven 15 jul. 2019 a las 03:20

1 respuesta

La mejor respuesta

El primero debe tener en cuenta que el área total de un Subplot se lleva a cabo está sin cambios de forma predeterminada. El código de la pregunta resulta en

enter image description here

Donde la etiqueta se corta simplemente. Cuando el código se ejecuta en el portátil JUPYTER con el backend en línea, la imagen PNG resultante se amplía para contener todo, incluso partes inicialmente fuera de la figura.

Puede ajustar automáticamente todos los subplots para encajar bien a la figura a través de constrained_layout o tight_layout(). P.ej.

fig, (ax1, ax2) = plt.subplots(2, 1, constrained_layout=True)
# ...

O

fig, (ax1, ax2) = plt.subplots(2, 1)
ax2.set_yticklabels(['a long and big label'], fontsize=26)
fig.tight_layout()

enter image description here

Sin embargo, no hay una forma automática de ajustar solo a uno de los subpletantes independientes de los demás. Para tal caso, uno tendría que calcular manualmente el espacio necesario.

import matplotlib.pyplot as plt

fig = plt.figure()
gs = fig.add_gridspec(2,2)

ax1 = fig.add_subplot(gs[0,:])
ax2 = fig.add_subplot(gs[1,1])
ax2.set_yticklabels(['a long and big label'], fontsize=26)

fig.canvas.draw()
bb = ax2.yaxis.get_tightbbox(fig.canvas.get_renderer())
labelwidth = fig.transFigure.inverted().transform([bb.width, 0])[0]
axwidth = ax1.get_position().width

gs.set_width_ratios([labelwidth, axwidth-labelwidth] )
ax2.set_position(gs[1,1].get_position(fig))

plt.show()

enter image description here

1
ImportanceOfBeingErnest 15 jul. 2019 a las 10:11