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()