separation - subplot python grid
GridSpec con ejes compartidos en Python (2)
Esta solución a otro hilo sugiere usar gridspec.GridSpec
lugar de plt.subplots
. Sin embargo, cuando comparto hachas entre subparcelas, suelo usar una sintaxis como la siguiente
fig, axes = plt.subplots(N, 1, sharex=''col'', sharey=True, figsize=(3,18))
¿Cómo puedo especificar sharex
y sharey
cuando uso GridSpec
?
Ambas opciones de Joe me dieron algunos problemas: el primero, relacionado con el uso directo de figure.tight_layout
lugar de figure.set_tight_layout()
y, el último, con algunos backends ( UserWarning: tight_layout: retrocediendo al renderizador de Agg ). Pero la respuesta de Joe definitivamente me abrió camino hacia otra alternativa compacta. Este es el resultado de un problema cercano al de OP:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=1, sharex=''col'', sharey=True,
gridspec_kw={''height_ratios'': [2, 1]},
figsize=(4, 7))
fig.set_tight_layout({''rect'': [0, 0, 1, 0.95], ''pad'': 1.5, ''h_pad'': 1.5})
plt.setp(axes, title=''Test'')
fig.suptitle(''An overall title'', size=20)
plt.show()
En primer lugar, hay una solución más fácil para su problema original, siempre y cuando esté de acuerdo con ser un poco impreciso. Simplemente reinicie la extensión superior de las subtramas a la predeterminada después de llamar a tight_layout
:
fig, axes = plt.subplots(ncols=2, sharey=True)
plt.setp(axes, title=''Test'')
fig.suptitle(''An overall title'', size=20)
fig.tight_layout()
fig.subplots_adjust(top=0.9)
plt.show()
Sin embargo, para responder a su pregunta, deberá crear las subtramas en un nivel ligeramente inferior para usar gridspec. Si desea replicar el ocultamiento de ejes compartidos como las subplots
, deberá hacerlo manualmente, utilizando el argumento de Figure.add_subplot
para Figure.add_subplot
y ocultando los ticks duplicados con plt.setp(ax.get_yticklabels(), visible=False)
.
Como ejemplo:
import matplotlib.pyplot as plt
from matplotlib import gridspec
fig = plt.figure()
gs = gridspec.GridSpec(1,2)
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1], sharey=ax1)
plt.setp(ax2.get_yticklabels(), visible=False)
plt.setp([ax1, ax2], title=''Test'')
fig.suptitle(''An overall title'', size=20)
gs.tight_layout(fig, rect=[0, 0, 1, 0.97])
plt.show()