2012-06-28 17 views

Respuesta

17

asuma que su archivo se parece a esto y se nombra test.txt (espacio delimitado):

1 2 
3 4 
5 6 
7 8 

continuación:

#!/usr/bin/python 

import numpy as np 
import matplotlib.pyplot as plt 

with open("test.txt") as f: 
    data = f.read() 

data = data.split('\n') 

x = [row.split(' ')[0] for row in data] 
y = [row.split(' ')[1] for row in data] 

fig = plt.figure() 

ax1 = fig.add_subplot(111) 

ax1.set_title("Plot title...")  
ax1.set_xlabel('your x label..') 
ax1.set_ylabel('your y label...') 

ax1.plot(x,y, c='r', label='the data') 

leg = ax1.legend() 

plt.show() 

Example plot:

encuentro que navega por el sitio gallery of plots on the matplotlib útil para descifrar leyendas y etiquetas de ejes.

+1

Por qué interpretaría los datos directamente en lugar de usando np.loadtxt? – cge

+0

Nunca he tenido mucha suerte con np.loadtxt (generalmente tengo archivos de entrada desordenados), pero para este simple ejemplo, probablemente funcionaría genial. – tbc

+0

¿Por qué no utilizar el módulo csv con delimitador configurado en espacio? – Dhara

29

Esto es relativamente simple si utiliza pylab (incluido con matplotlib) en lugar de matplotlib directamente. Comience con una lista de nombres de archivos y leyendas, como [('nombre del archivo 1', 'etiqueta 1'), ('nombre del archivo 2', 'etiqueta 2'), ...]. A continuación, puede usar algo como lo siguiente:

import pylab 

datalist = [ (pylab.loadtxt(filename), label) for filename, label in list_of_files ] 

for data, label in datalist: 
    pylab.plot(data[:,0], data[:,1], label=label) 

pylab.legend() 
pylab.title("Title of Plot") 
pylab.xlabel("X Axis Label") 
pylab.ylabel("Y Axis Label") 

También puede ser que desee añadir algo como fmt = 'o' al comando trama, con el fin de pasar de una línea a puntos. De forma predeterminada, matplotlib con pylab traza la misma figura sin borrarla, por lo que puede ejecutar el comando de trazado varias veces.

+0

Gracias por ayudarme, pero estoy corriendo hacia algunos problemas. ¿Cuál es el propósito de "list_of_files"? Además, cuando escribo pylab.plot (data [:, 0], data [:, 1], label = label) obtengo este objeto []. SI pudieras ayudarme, sería genial gracias. – Hiren

+0

El list_of_files es para si desea trazar múltiples archivos: simplemente haga algo como list_of_files = [('ruta al archivo 1', 'etiqueta 1'), ('ruta al archivo 2', 'etiqueta 2'), .. .], y el código los trazará a todos en el mismo diagrama con esas etiquetas. En cuanto a la salida que obtienes, esa es la salida habitual; la trama debería aparecer en una ventana separada? Si no, tienes un problema con tu instalación de matplotlib. ¿Estás usando ipython? Si es así, ¿estás usando una notebook ipython o simplemente una ipython estándar? – cge

+0

Gracias y puedo hacerlo ahora. Sin embargo, tengo un problema: el gráfico guardado tiene gráficos antiguos en el nuevo gráfico y la única forma de que tenga un nuevo gráfico es reiniciando el IDLE de Python. ¿Por qué es eso? Quiero tener múltiples gráficos, pero no con el gráfico anterior de la última figura/gráfico. – Hiren

2

me siento de la manera más simple sería

from matplotlib import pyplot; 
from pylab import genfromtxt; 
mat0 = genfromtxt("data0.txt"); 
mat1 = genfromtxt("data1.txt"); 
pyplot.plot(mat0[:,0], mat0[:,1], label = "data0"); 
pyplot.plot(mat1[:,0], mat1[:,1], label = "data1"); 
pyplot.legend(); 
pyplot.show(); 
  1. etiqueta es la cadena que se muestra en la leyenda
  2. se puede trazar como muchas series de puntos de datos como sea posible antes del espectáculo() para trazar todos ellos en el mismo gráfico Esta es la manera simple de trazar gráficos simples. Para otras opciones en genfromtxt, vaya a este url.
Cuestiones relacionadas