Automatizar la población de subplots

Estoy en el proceso de escribir una secuencia de comandos de Python que (1) obtendrá una lista de valores y para que cada subplot se grafique contra un conjunto común de valores de x, (2) haga que cada una de estas subplots sea una plot de dispersión y coloque en la ubicación adecuada en la cuadrícula de subplot y (3) complete estas tareas para diferentes tamaños de cuadrículas de subplot. Lo que quiero decir con la tercera afirmación es esto: el caso de prueba que estoy usando los resultados en una matriz de 64 plots, 8 filas y 8 columnas. Me gustaría que el código pueda manejar cualquier tamaño de matriz (aproximadamente entre 50 y 80 gráficos) para varias dimensiones de cuadrícula sin que tenga que volver cada vez que ejecuto el código y diga “Bien, aquí está el número de filas y columnas que necesito “.

En este momento, estoy usando un comando exec para obtener los valores de y, y está funcionando bien. Soy capaz de hacer cada una de las subplots y de rellenar la cuadrícula, pero solo si escribo todo a mano (64 veces hacer lo mismo es estúpido, así que sé que debe haber una forma de automatizar esta).

¿Alguien podría sugerir una forma en que esto podría lograrse? No puedo proporcionar datos o mi código, ya que este es un material de investigación y no es mío para divulgarlo. Disculpe si esta pregunta es muy básica o si es algo que debería poder determinar a partir de la documentación existente. Soy muy nuevo en la progtwigción, y podría usar un poco de orientación!

Una función útil para cosas como esta es plt.subplots(nrows, ncols) que devolverá una matriz (una matriz de objetos numpy) de subplots en una cuadrícula normal.

Como ejemplo:

 import matplotlib.pyplot as plt import numpy as np fig, axes = plt.subplots(nrows=4, ncols=4, sharex=True, sharey=True) # "axes" is a 2D array of axes objects. You can index it as axes[i,j] # or iterate over all items with axes.flat # Plot on all axes for ax in axes.flat: x, y = 10 * np.random.random((2, 20)) colors = np.random.random((20, 3)) ax.scatter(x, y, s=80, facecolors=colors, edgecolors='') ax.set(xticks=np.linspace(0, 10, 6), yticks=np.linspace(0, 10, 6)) # Operate on just the top row of axes: for ax, label in zip(axes[0, :], ['A', 'B', 'C', 'D']): ax.set_title(label, size=20) # Operate on just the first column of axes: for ax, label in zip(axes[:, 0], ['E', 'F', 'G', 'H']): ax.set_ylabel(label, size=20) plt.show() 

introduzca la descripción de la imagen aquí

Si va a usar Python, querrá dar un paseo a través del Tutorial de Python para aprender el lenguaje y las estructuras de datos disponibles, hay buen material de instrucción en línea, puede que desee considerar algunos de los cursos de informática 101 que utilizan Python – MIT OCW, edX, Cómo pensar como un científico informático …

Sin conocer los detalles completos, imagino que podría ser algo como esto, que es una mezcla de código real y pseudocódigo:

 yvalues = list() while yvalues_exist: yvalues.append(get_yvalue) #limit plot to eight columns columns = 8 quotient, remainder = divmod(len(yvalues), columns) rows = quotient if remainder: rows = rows + 1 for n, yvalue in enumerate(yvalues): plt.subplot(rows, columns, n) plt.plot(yvalue) 

list (), append (), while, divmod (), len (), if, for, enumerate () son todas las declaraciones, métodos o funciones incorporadas de Python.