¿Cómo usar matplotlib para crear un gráfico grande de subplots?

Estoy teniendo problemas para recorrer cada subplot. Llego a las coordenadas de la ttwig secundaria y luego deseo que aparezcan diferentes modelos en cada ttwig secundaria. Sin embargo, mi solución actual recorre todas las subplots, pero en cada una recorre todos los modelos, dejando que el último modelo sea graficado en cada subplot, lo que significa que todos se ven iguales.

Mi objective es colocar un modelo en cada subttwig. ¡Por favor ayuda!

modelInfo = csv_info(filename) # obtains information from csv file f, axarr = plt.subplots(4, 6) for i in range(4): for j in range(6): for model in modelInfo: lat = dictionary[str(model) + "lat"] lon = dictionary[str(model) + "lon"] lat2 = dictionary[str(model) + "lat2"] lon2 = dictionary[str(model) + "lon2"] axarr[i, j].plot(lon, lat, marker = 'o', color = 'blue') axarr[i, j].plot(lon2, lat2, marker = '.', color = 'red') axarr[i, j].set_title(model) 

Puedes zip tus modelos y ejes juntos y pasar ambos al mismo tiempo. Sin embargo, debido a que sus subplots vienen como una 2d array , primero debe “linealizar” sus elementos. Puede hacerlo fácilmente utilizando el método de reshape para matrices numpy . Si le da a ese método el valor -1 , convertirá la matriz en un vector 1d . A falta de sus datos de entrada, hice un ejemplo usando funciones matemáticas de numpy . La graciosa línea getattr solo está allí, así que fácilmente pude agregar títulos a las plots:

 from matplotlib import pyplot as plt import numpy as np modelInfo = ['sin', 'cos', 'tan', 'exp', 'log', 'sqrt'] f, axarr = plt.subplots(2,3) x = np.linspace(0,1,100) for model, ax in zip(modelInfo, axarr.reshape(-1)): func = getattr(np, model) ax.plot(x,func(x)) ax.set_title(model) f.tight_layout() plt.show() 

El resultado se ve así: Figura con diferentes funciones en diferentes subparcelas. .

Tenga en cuenta que, si su número de modelos excede el número de subplots disponibles, los modelos en exceso se ignorarán sin un mensaje de error.

Espero que esto ayude.

Creo que esto es lo que está buscando, que funciona siempre que len(modelInfo) sea ​​inferior a 6x4=24 :

 modelInfo = csv_info(filename) # obtains information from csv file f, axarr = plt.subplots(4, 6) for n, model in enumerate(modelInfo): i = int(n/4) j = n % 6 lat = dictionary[str(model) + "lat"] lon = dictionary[str(model) + "lon"] lat2 = dictionary[str(model) + "lat2"] lon2 = dictionary[str(model) + "lon2"] axarr[i, j].plot(lon, lat, marker = 'o', color = 'blue') axarr[i, j].plot(lon2, lat2, marker = '.', color = 'red') axarr[i, j].set_title(model)