vertical una tamaño logaritmica linea grafico grafica fijar etiquetas escala ejes como cambiar ajustar python numpy matplotlib

python - tamaño - ¿Cómo hacer varias parcelas en una sola página usando matplotlib?



fijar ejes matplotlib (5)

He escrito un código que abre 16 figuras a la vez. Actualmente todos se abren como gráficos separados. Me gustaría que abrieran todos en la misma página. No es el mismo gráfico. Quiero 16 gráficos separados en una sola página / ventana. Además, por algún motivo, el formato de numbins y defaultreallimits no se mantiene en la figura 1 anterior. ¿Debo utilizar el comando subplot? No entiendo por qué tendría que hacerlo pero no puedo entender qué más haría.

import csv import scipy.stats import numpy import matplotlib.pyplot as plt for i in range(16): plt.figure(i) filename= easygui.fileopenbox(msg=''Pdf distance 90m contour'', title=''select file'', filetypes=[''*.csv''], default=''X://herring_schools//') alt_file=open(filename) a=[] for row in csv.DictReader(alt_file): a.append(row[''Dist_90m(nmi)'']) y= numpy.array(a, float) relpdf=scipy.stats.relfreq(y, numbins=7, defaultreallimits=(-10,60)) bins = numpy.arange(-10,60,10) print numpy.sum(relpdf[0]) print bins patches=plt.bar(bins,relpdf[0], width=10, facecolor=''black'') titlename= easygui.enterbox(msg=''write graph title'', title='''', default='''', strip=True, image=None, root=None) plt.title(titlename) plt.ylabel(''Probability Density Function'') plt.xlabel(''Distance from 90m Contour Line(nm)'') plt.ylim([0,1]) plt.show()


Dado que esta pregunta es de hace 4 años, se han implementado nuevas cosas y entre ellas hay una nueva función plt.subplots que es muy conveniente :

fig, axes = plot.subplots(nrows=2, ncols=3, sharex=True, sharey=True)

donde axes es una numpy.ndarray de objetos AxesSubplot, por lo que es muy conveniente pasar por las diferentes subtramas usando solo índices de matriz [i,j] .


Esto también funciona:

for i in range(19): plt.subplot(5,4,i+1)

Traza 19 gráficos totales en una página. El formato es 5 abajo y 4 a través ..


La respuesta de las3rjock , que de alguna manera es la respuesta aceptada por el OP, es incorrecta: el código no se ejecuta, ni es válida la sintaxis matplotlib; esa respuesta no proporciona ningún código ejecutable y carece de cualquier información o sugerencia que el OP pueda encontrar útil al escribir su propio código para resolver el problema en el PO.

Dado que es la respuesta aceptada y ya ha recibido varios votos positivos, supongo que es necesaria una pequeña deconstrucción.

En primer lugar, llamar a la subtrama no le da múltiples tramas; se llama a la subtrama para crear una sola gráfica, así como también para crear varias parcelas. Además, "cambiar plt.figure (i)" no es correcto.

plt.figure () (en el que plt o PLT suele ser la biblioteca de macromplpll de matplotlib importada y rebotada como una variable global, plt o, a veces, PLT, así:

from matplotlib import pyplot as PLT fig = PLT.figure()

la línea justo arriba crea una instancia de figura matplotlib; a continuación, se llama al método add_subplot de este objeto para cada ventana de trazado (se piensa informalmente en un eje xey que comprende una sola subparcela). Usted crea (ya sea solo uno o varios en una página), como

fig.add_subplot(111)

esta sintaxis es equivalente a

fig.add_subplot(1,1,1)

elige el que tenga sentido para ti.

A continuación he enumerado el código para trazar dos tramas en una página, una encima de la otra. El formateo se realiza mediante el argumento pasado a add_subplot . Observe que el argumento es ( 211 ) para el primer diagrama y ( 212 ) para el segundo.

from matplotlib import pyplot as PLT fig = PLT.figure() ax1 = fig.add_subplot(211) ax1.plot([(1, 2), (3, 4)], [(4, 3), (2, 3)]) ax2 = fig.add_subplot(212) ax2.plot([(7, 2), (5, 3)], [(1, 6), (9, 5)]) PLT.show()

Cada uno de estos dos argumentos es una especificación completa para ubicar correctamente las ventanas de trazado respectivas en la página.

211 (que de nuevo, también podría escribirse en forma de 3 tuplas como (2,1,1) significa dos filas y una columna de ventanas de trazado; el tercer dígito especifica el orden de esa ventana de subtrama particular relativa a las otras ventanas de subtrama- -En este caso, este es el primer gráfico (que lo coloca en la fila 1), por lo tanto, el gráfico número 1, fila 1 col 1.

El argumento pasado a la segunda llamada a add_subplot , difiere del primero solo por el dígito final (un 2 en lugar de un 1, porque este diagrama es el segundo gráfico (fila 2, col 1).

Un ejemplo con más parcelas: si en cambio quisiera cuatro gráficos en una página, en una configuración de matriz de 2x2, llamaría al método add_subplot cuatro veces, pasando estos cuatro argumentos (221), (222), (223) y ( 224), para crear cuatro trazados en una página a las 10, 2, 8 y 4 en punto, respectivamente, y en este orden.

Observe que cada uno de los cuatro argumentos contiene dos derivaciones 2, que codifica la configuración de 2 x 2, es decir, dos filas y dos columnas.

El tercer dígito (el más a la derecha) en cada uno de los cuatro argumentos codifica el orden de esa ventana de trazado particular en la matriz de 2 x 2, es decir, fila 1 col 1 (1), fila 1 col 2 (2), fila 2 col 1 (3), fila 2 col 2 (4).


La respuesta de @doug & FS. son muy buenas soluciones. Quiero compartir la solución para la iteración en pandas.dataframe.

import pandas as pd df=pd.DataFrame([[1, 2], [3, 4], [4, 3], [2, 3]]) fig = plt.figure(figsize=(14,8)) for i in df.columns: ax=plt.subplot(2,1,i+1) df[[i]].plot(ax=ax) print(i) plt.show()


Para responder a su pregunta principal, desea usar el comando subplot . Creo que cambiar plt.figure(i) a plt.subplot(4,4,i+1) debería funcionar.