2012-09-07 11 views
10

Tengo un archivo .dat que contiene dos columnas de números por lo que se ve algo como esto:Cómo trazar archivos con numpy?

111 112 
110.9 109 
103 103 

y así sucesivamente.

Quiero trazar las dos columnas una contra la otra. Nunca he tratado con un archivo .dat antes, así que no estoy seguro de por dónde empezar.

Hasta ahora descubrí que Numpy tiene algo que puedo usar para llamar.

data = numpy.loadtxt('data.DAT') 

pero no estoy seguro de dónde ir desde aquí. ¿Algunas ideas?

+1

entonces tienes una 2d serie de puntos ... esto no tiene nada que ver con el archivo * .dat podría ser cualquier cosa * .txt funcionaría exactamente igual ... tu real q La pregunta es "¿Cómo trazo una matriz numpy?" –

+1

Es fácil en 'gnuplot'; ^). 'plot 'yourfile.dat' u 1: 2' (pero, por supuesto, eso no aborda la pregunta real ...) – mgilson

+0

Puede usar Scavis que interactúa con NumPy (o JNumeric en Java) como se explica en el manual de Scavis ] (http://jwork.org/scavis/wikidoc/doku.php?id=man:numeric:jnum) –

Respuesta

14

Numpy no soporta Plott ing por sí mismo. Por lo general, usaría matplotlib para trazar matrices numpy.

Si solo desea "examinar el archivo", creo que la manera más fácil sería usar plotfile.

import matplotlib.pyplot as plt 

plt.plotfile('data.dat', delimiter=' ', cols=(0, 1), 
      names=('col1', 'col2'), marker='o') 
plt.show() 

Puede utilizar esta función casi como gnuplot desde dentro ipython:

$ ipython --pylab 
... 
... 
In [1]: plt.plotfile('data.dat', delimiter=' ', cols=(0, 1), 
...     names=('col1', 'col2'), marker='o') 

o ponerlo en un script de shell y pasar los argumentos a él para utilizarlo directamente desde su cáscara

plotfile_example

+0

Muchas gracias. ¡Definitivamente hace el trabajo! –

4
import numpy as np 
import matplotlib.pyplot as plot 
#data = np.loadtxt("plot_me.dat") 
#x,y=np.loadtxt("plot_me.dat",unpack=True) #thanks warren! 
#x,y = zip(*data) 
#plot.plot(x, y, linewidth=2.0) 
plot.plot(*np.loadtxt("plot_me.dat",unpack=True), linewidth=2.0) 
plot.show() 

[Editar] Gracias por la punta, creo que es lo más compacto posible ahora: P

plot 1

Si quieren que sea log10 sólo llamar log10 en el nparray)

plot.plot(*np.log10(np.loadtxt("plot_me.dat",unpack=True)), linewidth=2.0) 

log10

+1

Puede hacer que el código sea aún más conciso utilizando la palabra clave 'unpack' en' loadtxt': 'x, y = np.loadtxt ('plot_me.dat', desempaquetar = Verdadero) ' –

+0

¡Muchas gracias! ¿Sabes cómo podría tomar el log_10 de estas columnas? –

+0

Creo que solo 'plot.plot (* np.log10 (np.loadtxt (" plot_me.dat ", unpack = True)), linewidth = 2.0)' –