subplots_adjust subplots hspace python matplotlib figure subplot

python - hspace - Matplotlib: ¿añadir subplots a un subplot?



subplots_adjust (1)

Intento crear una figura que consiste en una cuadrícula de 2x2, donde en cada cuadrante hay 2 subparcelas apiladas verticalmente (es decir, una cuadrícula de 2x1). Sin embargo, parece que no puedo averiguar cómo lograr esto.

Lo más cercano que he conseguido es usar gridspec y algún código feo (ver más abajo), pero debido a que gridspec.update(hspace=X) cambia el espaciado de todas las subparcelas, todavía no estoy donde me gustaría estar.

Idealmente, lo que quiero es, usando la imagen a continuación como ejemplo, disminuir el espaciado entre las subparcelas dentro de cada cuadrante, mientras que aumenta el espaciado vertical entre los cuadrantes superior e inferior (es decir, entre 1-3 y 2-4).

¿Hay alguna manera de hacer esto (con o sin usar gridspec)? Lo que originalmente imaginé es generar cada una de las cuadrículas de subplotis (es decir, cada cuadrícula de 2x1) e insertarlas en la cuadrícula más grande de subplot de 2x2, pero no he descubierto cómo agregar una subparcela a una subparcela, si existe. lejos.

import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec plt.figure(figsize=(10, 8)) gs = gridspec.GridSpec(4,2) gs.update(hspace=0.4) for i in range(2): for j in range(4): ax = plt.subplot(gs[j,i]) ax.spines[''top''].set_visible(False) ax.spines[''right''].set_visible(False) plt.tick_params(which=''both'', top=''off'', right=''off'') if j % 2 == 0: ax.set_title(str(i+j+1)) ax.plot([1,2,3], [1,2,3]) ax.spines[''bottom''].set_visible(False) ax.get_xaxis().set_visible(False) else: ax.plot([1,2,3], [3,2,1])


Puedes anidar tu GridSpec usando SubplotSpec . La cuadrícula exterior será de 2 x 2 y la cuadrícula interna será de 2 x 1. El siguiente código debe darle una idea básica.

import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec fig = plt.figure(figsize=(10, 8)) outer = gridspec.GridSpec(2, 2, wspace=0.2, hspace=0.2) for i in range(4): inner = gridspec.GridSpecFromSubplotSpec(2, 1, subplot_spec=outer[i], wspace=0.1, hspace=0.1) for j in range(2): ax = plt.Subplot(fig, inner[j]) t = ax.text(0.5,0.5, ''outer=%d, inner=%d'' % (i,j)) t.set_ha(''center'') ax.set_xticks([]) ax.set_yticks([]) fig.add_subplot(ax) fig.show()