muestra mostrar manejo imagenes imagen guardar fondo example python for-loop matplotlib plot

python - mostrar - media django



¿Cómo iteraría sobre una lista de archivos y los trazaría como subtramas en una sola figura? (2)

Intento trazar los archivos en 8 subtramas para 2 figuras. Estoy usando un operador de bucle y enumeración, junto con axarray para hacer esto. Casi estoy allí con el último paso (con axarray) pero necesito orientación 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)''


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

En segundo lugar, debe usar la subplot correctamente. Aquí está el documento de la función de subplot :

Firma de llamada típica:

subtrama (nrows, ncols, plot_number) Donde nrows y ncols se usan para dividir teóricamente la figura en los sub-ejes nrows * ncols, y plot_number se usa para identificar la subtrama particular que esta función va a crear dentro de la rejilla nocional. plot_number comienza en 1, se incrementa primero en las filas y tiene un máximo de nrows * ncols.

EDITAR

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


Puedes intentar 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 itera sobre los artículos al mismo tiempo que devuelve sus índices ( n );
  • la función subplot(size, column, row) requiere estos parámetros: el size es la cantidad total de subtramas en la figura, y la row y la column determinan la posición de la gráfica actual. n+1 es necesario para colocar la gráfica en la posición correcta a lo largo de la cuadrícula;
  • Edité el resto del código con tus propios datos