¿Cómo iteraré sobre una lista de archivos y los graficaré como subplots en una sola figura?

Estoy tratando de trazar archivos en 8 subplots para 2 figuras. Estoy usando un operador de bucle for y enumeración, junto con axarray para hacer esto. Casi he llegado con el último paso (con axarray) pero necesito una guía sobre cómo terminarlo. Aquí está mi código:

'import matplotlib.pyplot as plt import parse_gctoo import glob f, ax1 = plt.subplots() def histo_plotter(file, plot_title, ax): # read in file as string GCT_object = parse_gctoo.parse(file) # for c in range(9): # print type(GCT_object.data_df.iloc[0][c]) # computing median of rows in data_df # gene_medians = GCT_object.data_df.quantile(q=0.5,axis=1) # plot_title = "Gene expression levels for {}".format(cell) if plot_title == "ZSPCQNORM": gene_means = GCT_object.data_df.mean(axis=1) #making histogram of means ax.hist(gene_means) plt.title("MeanGeneExpressionZSPCQNORM") plt.xlabel("MedianGeneExpression") plt.ylabel("Count") elif plot_title == "QNORM": gene_medians = GCT_object.data_df.median(axis=1) #making histogram of medians ax.hist(gene_medians) plt.title("MedianGeneExpressionQNORM") plt.xlabel("MedianGeneExpression") plt.ylabel("Count") plt.show() f.savefig("hist_example1.png") # plt.ylim(-1, 1) # plt.xlim(-1,1) # histo_plotter("/Users/eibelman/Desktop/ZSCOREDATA- CXA061_SKL_48H_X1_B29_ZSPCQNORM_n372x978.gct.txt", "ZSPCQNORM", ax1) # histo_plotter("/Users/eibelman/Desktop/NewLJP005_A375_24H_X2_B19_QNORM_n373x978.gct.txt", "QNORM", ax1) ######### # Create list of x2 LJP005 cell line files z_list = glob.glob("/Volumes/cmap_obelix/pod/custom/LJP/roast/LJP005_[A375, A549, BT20, HA1E, HC515, HEPG2, HS578T, HT29]*X2*/zs/*ZSPCQNORM*.gct") q_list = glob.glob("/Volumes/cmap_obelix/pod/custom/LJP/roast/LJP005_[A375, A549, BT20, HA1E, HC515, HEPG2, HS578T, HT29]*_X2_*/*_QNORM_*.gct") # for loop which allows plotting multiple files in a single figure f, axarray = plt.subplots(2, 4) for n, single_q in enumerate(q_list): # axarray = plt.subplot(len(q_list), 1, n+1) axarray = histo_plotter(n, "QNORM", ax1) # axarray[n].plot() plt.show() # f, axarray = plt.subplots(2, 4) # for n, single_z in enumerate(z_list): # # ax = plt.subplot(len(z_list), 1, n+1) # histo_plotter(single_z, "ZSPCQNORM", ax1)' 

Puedes probar esto:

 import matplotlib.pyplot as plt plt.figure() for n, single_q in enumerate(q_list): ax = plt.subplot(len(q_list), 1, n+1) GCT_object = parse_gctoo.parse(single_q) gene_medians = GCT_object.data_df.median(axis=1) plt.hist(gene_medians) # tweak title, labels, etc. plt.show() 

Explicando

  • enumerate iteraciones sobre los elementos ( s ) al mismo tiempo que devuelve sus índices ( n );
  • la función subplot(size, column, row) requiere estos parámetros: size es la cantidad total de subplots en la figura, y la row y la column determinan la posición para el diagtwig actual. n+1 es necesario para colocar la gráfica en la posición correcta a lo largo de la cuadrícula de la gráfica;
  • Edité el rest del código con tus propios datos.

Primero, es suficiente llamar a plt.figure() una vez al comienzo del ciclo.

Segundo, necesitas usar la subplot correctamente. Aquí está el documento de la función de subplot :

Firma de llamada típica:

subplot (nrows, ncols, plot_number) Donde nrows y ncols se utilizan para dividir teóricamente la figura en nrows * ncols sub-ejes, y plot_number se usa para identificar la subplot particular que esta función debe crear dentro de la cuadrícula nocional. plot_number comienza en 1, incrementa primero las filas y tiene un máximo de nrows * ncols.

EDITAR

Si desea una nueva cifra para cada archivo, en cada iteración debe llamar a plt.figure() sin argumentos.