2012-06-28 14 views

risposta

17

Assumere il file assomiglia a questo ed è denominato test.txt (spazio delimitato):

1 2 
3 4 
5 6 
7 8 

Poi:

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

trovo che la consultazione del sito gallery of plots on the matplotlib utile per capire le etichette delle leggende e degli assi.

+1

Perché si interpretare i dati direttamente invece di usando np.loadtxt? – cge

+0

Non ho mai avuto molta fortuna con np.loadtxt (di solito hanno file di input messier), ma per questo semplice esempio, probabilmente funzionerebbe alla grande. – tbc

+0

Perché non utilizzare il modulo csv con delimitatore impostato nello spazio? – Dhara

29

Ciò è relativamente semplice se si utilizza direttamente pylab (incluso in matplotlib) anziché matplotlib. Inizia con un elenco di nomi di file e nomi di legenda, come [('nome del file 1', 'etichetta 1'), ('nome del file 2', 'etichetta 2'), ...]. Quindi è possibile utilizzare qualcosa come il seguente:

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

È inoltre possibile aggiungere qualcosa come fmt = 'o' al comando trama, al fine di cambiare da una linea a punti. Per impostazione predefinita, matplotlib con pylab traccia la stessa figura senza cancellarla, quindi è possibile eseguire il comando di stampa più volte.

+0

Grazie per avermi aiutato, ma sto incontrando alcuni problemi. Qual è lo scopo di "list_of_files". Inoltre, quando digito pylab.plot (dati [:, 0], dati [:, 1], etichetta = etichetta) ottengo questo []. Se potessi aiutarmi sarebbe fantastico grazie. – Hiren

+0

Il list_of_files è per se si vuole tracciare più file: basta fare qualcosa come list_of_files = [('percorso al file 1', 'etichetta 1'), ('percorso al file 2', 'etichetta 2'), .. .], e il codice traccerà tutti loro sulla stessa trama con quelle etichette. Per quanto riguarda l'output che ottieni, è la solita uscita; la trama dovrebbe apparire in una finestra separata? In caso contrario, si è verificato un problema con l'installazione di matplotlib. Stai usando ipython? Se è così, stai usando un notebook ipython o solo un ipython standard? – cge

+0

Grazie e io sono in grado di farlo subito. Ho un problema però che è che la trama salvata ha vecchi grafici nel nuovo grafico e l'unico modo per me di avere un nuovo grafico è riavviare Python IDLE. Perché è così? Voglio avere più grafici ma non con il grafico precedente dell'ultima figura/grafico. – Hiren

2

mi sento il modo più semplice sarebbe

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. etichetta è la stringa visualizzata sulla leggenda
  2. si può tracciare come molte serie di punti dati possibile prima di show() per tracciare tutti sullo stesso grafico Questo è il modo semplice per tracciare grafici semplici. Per altre opzioni in genfromtxt vai a questo url.
Problemi correlati