2010-04-07 28 views
5

Deseo hacer un histograma en Matplotlib a partir de un archivo de entrada que contiene los datos brutos (.txt). Estoy enfrentando problemas al referirme al archivo de entrada. Supongo que debería ser un programa bastante pequeño. Cualquier gurú de Matplotlib, ¿alguna ayuda?Histograma en Matplotlib con el archivo de entrada

No estoy pidiendo el código, ¡algunas entradas deberían ponerme en el camino correcto!

Respuesta

9

recomendaría usar 'loadtxt' que está realmente en la biblioteca NumPy. Hay funciones relacionadas en Matplotlib (csv2rec) pero Matplotlib está realmente estandarizando en loadtxt.

Así es como funciona:

from matplotlib import pyplot as PLT 

with open('name_of_your_file.csv') as f: 
    v = NP.loadtxt(f, delimiter=",", dtype='float', comments="#", skiprows=1, usecols=None) 

'v', el objeto devuelto por 'loadtxt', es una matriz m x n NumPy.

'loadtxt' acepta un archivo o un descriptor de archivo. La instancia anterior tiene la mayor parte de la firma del método. 'skiprows' es un número entero que especifica el número de filas contadas desde la parte superior que desea omitir; es común establecerlo en "1" para omitir la fila del encabezado; 'usecols' comienza en '0' y es una lista que recita las columnas que desea incluir ('None' es el valor predeterminado, y significa 'include all'). Los otros parámetros funcionan como se esperaba.

para trazar un histograma de estos datos:

from matplotlib import pyplot as PLT 

v_hist = NP.ravel(v) # 'flatten' v 
fig = PLT.figure() 
ax1 = fig.add_subplot(111) 

n, bins, patches = ax1.hist(v_hist, bins=50, normed=1, facecolor='green') 
PLT.show() 
+0

@doug: Muchas gracias – Arkapravo

+0

siempre debe usar 'genfromtxt' en lugar de loadtxt, especialmente cuando se trata de archivos grandes, ya que tiene el mismo comportamiento predeterminado, pero puede ser 20 veces más rápido. –

0

No se puede decir directamente a matplotlib que haga un histograma a partir de un archivo de entrada; deberá abrir el archivo usted mismo y obtener los datos del mismo. Cómo lo haría depende del formato del archivo; si solo se trata de un archivo con un número en cada línea, puede pasar por cada línea, strip() espacios y nuevas líneas, y usar float() para convertirla en un número.

+0

@ Daniel G: ¿Ese, pero se vuelve más desordenado! – Arkapravo

+1

@Arkapravo - Es cierto, y no me había dado cuenta acerca de la solución de Doug: use eso :) –

Cuestiones relacionadas