/ / Rellene las subparcelas de matplotlib por columna, no por fila - python, matplotlib

Rellene las subparcelas de matplotlib por columna, no por fila - python, matplotlib

De forma predeterminada, las subparcelas de matplotlib se rellenan por fila, no por columna. Para aclarar, los comandos.

plt.subplot(nrows=3, ncols=2, idx=2)
plt.subplot(nrows=3, ncols=2, idx=3)

primer gráfico en el gráfico superior derecho de la cuadrícula de gráfico 3x2 (idx = 2), y luego en el gráfico central izquierdo (idx = 3).

A veces puede ser deseable por cualquier motivo.para llenar las subparcelas por fila, no por columna (por ejemplo, porque las parcelas directamente consecutivas van juntas y son más fáciles de interpretar cuando están colocadas una debajo de la otra, en lugar de una junto a la otra). ¿Cómo se puede lograr esto?

Respuestas

4 para la respuesta № 1

Puedes crear la matriz de ejes 3x2 usando:

fig, axes = plt.subplots(nrows=3, ncols=2)

Si transpone esta matriz, entonces alisarla puede trazar una columna sabia, en lugar de una fila:

fig, axes = plt.subplots(nrows=3, ncols=2)

for ax in axes.T.flatten():
ax.plot([1,2,3])

1 para la respuesta № 2

Probablemente hay un millón de maneras (fáciles) de hacer esto, pero como me tomó más de un minuto pensar en esto, pensé que compartiría mi solución:

def row_based_idx(num_rows, num_cols, idx):
return np.arange(1, num_rows*num_cols + 1).reshape((num_rows, num_cols)).transpose().flatten()[idx-1]

Con esto, uno puede simplemente hacer

row_based_plot_idx = row_based_idx(num_rows, num_cols, col_based_plot_idx)
plt.subplot(num_rows, num_cols, row_based_plot_idx)

Sólo espero que esto salve a alguien un minuto. Seguramente, hay mejores soluciones disponibles.