¿Cuál es la mejor manera de crear una matriz de subtrama (3,3) en python con la siguiente captura:
Las dos últimas subparcelas deben tener el mismo tamaño. Esto significa que se encontrarán en el medio de la trama del medio para las otras dos columnas.
Intenté hacer esto con gridspec pero no lo logré hasta ahora.
import numpy as np import matplotlib.pyplot as plt from matplotlib import gridspec # generate some data x = np.arange(0, 10, 0.2) y = np.sin(x) # plot it fig = plt.figure(figsize=(8, 6)) gs = gridspec.GridSpec(3, 3) ax0 = plt.subplot(gs[0]) ax0.plot(x, y) ax1 = plt.subplot(gs[1]) ax1.plot(y, x) ax3 = plt.subplot(gs[3]) ax3.plot(y, x) ax4 = plt.subplot(gs[4]) ax4.plot(y, x) ax6 = plt.subplot(gs[6]) ax6.plot(y, x) ax7 = plt.subplot(gs[7]) ax7.plot(y, x) plt.tight_layout() plt.savefig('grid_figure.png') plt.show()
No es necesario usar gridspec aquí. Solo agrega las subparcelas donde quieras tenerlas.
import numpy as np import matplotlib.pyplot as plt from matplotlib import gridspec # generate some data x = np.arange(0, 10, 0.2) y = np.sin(x) # plot it fig = plt.figure(figsize=(8, 6)) ax1= fig.add_subplot(3,3,1) ax2= fig.add_subplot(3,3,2) ax3= fig.add_subplot(3,3,4) ax4= fig.add_subplot(3,3,5) ax5= fig.add_subplot(3,3,7) ax6= fig.add_subplot(3,3,8) ax7= fig.add_subplot(2,3,3) ax8= fig.add_subplot(2,3,6) plt.show()
Supongo que su problema es con las dos parcelas en la última fila. Una idea podría ser pensar en la cuadrícula como una cuadrícula (3,6). Utiliza dos columnas para cada parcela en las dos primeras filas y 3 columnas para las dos parcelas en la última fila.
ax1 = plt.subplot2grid((3, 6), (0, 0), colspan=2) ax2 = plt.subplot2grid((3, 6), (0, 2), colspan=2) ax3 = plt.subplot2grid((3, 6), (0, 4), colspan=2) ax4 = plt.subplot2grid((3, 6), (1, 0), colspan=2) ax5 = plt.subplot2grid((3, 6), (1, 2), colspan=2) ax6 = plt.subplot2grid((3, 6), (1, 4), colspan=2) ax7 = plt.subplot2grid((3, 6), (2, 0), colspan=3) ax8 = plt.subplot2grid((3, 6), (2, 3), colspan=3)
Respuesta proporcionada como respuesta de la pregunta. Lo siguiente fue escrito por OP:
Gracias @datasailor por la solución. Aquí hay un ejemplo de trabajo:
import numpy as np import matplotlib.pyplot as plt from matplotlib import gridspec # generate some data x = np.arange(0, 10, 0.2) y = np.sin(x) # plot it fig = plt.figure(figsize=(8, 6)) gs = gridspec.GridSpec(6, 3) ax0 = plt.subplot(gs[0:2,0]) ax0.plot(x, y) ax1 = plt.subplot(gs[2:4,0]) ax1.plot(y, x) ax2 = plt.subplot(gs[4:6,0]) ax2.plot(y, x) ax3 = plt.subplot(gs[0:2,1]) ax3.plot(x, y) ax4 = plt.subplot(gs[2:4,1]) ax4.plot(y, x) ax5 = plt.subplot(gs[4:6,1]) ax5.plot(y, x) ax6 = plt.subplot(gs[0:3,2]) ax6.plot(x, y) ax7 = plt.subplot(gs[3:6,2]) ax7.plot(y, x) plt.tight_layout() plt.savefig('grid_figure.png') plt.show()