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: elsize
es la cantidad total de subtramas en la figura, y larow
y lacolumn
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