2012-06-28 7 views

Odpowiedz

17

zakładamy, że plik wygląda tak i nazywa test.txt (spacjami):

1 2 
3 4 
5 6 
7 8 

Następnie:

#!/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:

Uważam, że przeglądanie witryny gallery of plots on the matplotlib pomocny do określania legend i etykiet osi.

+1

Dlaczego interpretacji danych bezpośrednio zamiast używając np.loadtxt? – cge

+0

Nigdy nie miałem dużo szczęścia z np.loadtxt (zazwyczaj mają pliki wejściowe Messiera), ale dla tego prostego przykładu, prawdopodobnie działałoby świetnie. – tbc

+0

Dlaczego nie używać modułu csv z ogranicznikiem ustawionym na spację? – Dhara

29

Jest to stosunkowo proste, jeśli używasz pylab (zawartego w matplotlib) zamiast bezpośrednio w matplotlib. Zacznij od listy nazw plików i nazw legendy, takich jak [("nazwa pliku 1", "etykieta 1"), ("nazwa pliku 2", "etykieta 2"), ...]. Następnie można użyć coś jak następuje:

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") 

też chcieć dodać coś takiego fmt = „o” na polecenie działce, w celu zmiany z linii do punktów. Domyślnie matplotlib z paclab rysuje tę samą figurę bez jej usuwania, więc możesz po prostu uruchomić komendę plotowania wiele razy.

+0

Dziękuję za pomoc, ale mam pewne problemy. Jaki jest cel "list_f_files". Ponadto, gdy piszę: pylab.plot (dane [:, 0], dane [:, 1], etykieta = etykieta) otrzymuję ten obiekt []. JEŚLI mógłbyś mi pomóc, to wspaniale, dziękuję. – Hiren

+0

Lista_plików jest przeznaczona do tworzenia wielu plików: wystarczy zrobić coś takiego jak list_f_files = [("ścieżka do pliku 1", "etykieta 1"), ("ścieżka do pliku 2", "etykieta 2"), ... .], a kod wykreśli wszystkie z nich na tym samym wykresie z tymi etykietami. Jeśli chodzi o dane wyjściowe, to jest to zwykłe wyjście; fabuła powinna pojawić się w osobnym oknie? Jeśli nie, masz problem z instalacją matplotlib. Czy korzystasz z ipython? Jeśli tak, czy korzystasz z iPythona lub standardowego ipythona? – cge

+0

Dziękuję i jestem w stanie zrobić to teraz. Mam jednak jeden problem, który polega na tym, że zapisany wykres ma stare wykresy na nowym wykresie, a jedyną opcją dla mnie jest posiadanie nowych wykresów przez ponowne uruchomienie Pythona IDLE. Dlaczego tak się dzieje? Chcę mieć wiele wykresów, ale nie z poprzednim wykresem z ostatniego rysunku/wykresu. – Hiren

2

czuję najprostszym sposobem byłoby

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. etykieta jest ciąg znaków, który jest wyświetlany na legendzie
  2. można wykreślić jak najwięcej serię punktów danych, jak to możliwe przed show() do działki wszystkie z nich na tym samym wykresie To jest prosty sposób na wykreślenie prostych wykresów. W przypadku innych opcji w genfromtxt przejdź do tego url.
Powiązane problemy