2013-10-04 7 views
11

Ho un set di dati che carico in python utilizzando un dataframe panda. Quello che mi piacerebbe fare è creare un ciclo che stampi una trama per tutti gli elementi nella loro cornice, non tutti su uno. I miei dati sono in un file Excel strutturato in questo modo:Utilizzare un ciclo per tracciare n tabelle Python

Index | DATE | AMB CO 1 | AMB CO 2 |...|AMB CO_n | TOTAL 
1  | 1/1/12| 14  | 33  |...| 236 | 1600 
.  | ... | ...  | ...  |...| ... | ... 
.  | ... | ...  | ...  |...| ... | ... 
.  | ... | ...  | ...  |...| ... | ... 
n 

Questo è quello che ho per il codice finora:

import pandas as pd 
import matplotlib.pyplot as plt 
ambdf = pd.read_excel('Ambulance.xlsx', 
         sheetname='Sheet2', index_col=0, na_values=['NA']) 
print type(ambdf) 
print ambdf 
print ambdf['EAS'] 

amb_plot = plt.plot(ambdf['EAS'], linewidth=2) 
plt.title('EAS Ambulance Numbers') 
plt.xlabel('Month') 
plt.ylabel('Count of Deliveries') 
print amb_plot 

for i in ambdf: 
    print plt.plot(ambdf[i], linewidth = 2) 

Sto pensando di fare qualcosa di simile:

for i in ambdf: 
    ambdf_plot = plt.plot(ambdf, linewidth = 2) 

Quanto sopra non era lontanamente quello che volevo e deriva dalla mia non familiarità con Pandas, MatplotLib ecc, guardando alcuni documenti anche se a me sembra che matplotlib non sia nemmeno necessario (domanda 2)

Quindi A) Come posso produrre un diagramma di dati per ogni colonna nel mio df e B) devo usare matplotlib o devo solo usare i panda per fare tutto?

Grazie,

+0

si può solo in più serie a un grafico per ogni colonna o creare un grafico separato per ciascuno. Preferisci quest'ultimo, immagino? Inoltre, 'matplotlib' è un modulo piuttosto standard per fare grafici, piuttosto facile da usare e funziona come un sogno. –

+1

Non importa, questo è solo per farmi usare e praticarlo, sarebbe una convenzione dettare un metodo rispetto all'altro? –

risposta

18

Ok, quindi il metodo più semplice per creare diversi appezzamenti è questo:

import matplotlib.pyplot as plt 
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]] 
y=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]] 
for i in range(len(x)): 
    plt.figure() 
    plt.plot(x[i],y[i]) 

Si noti che è necessario creare un figure ogni volta o pyplot sarà tracciare nella prima creato .

Se si desidera creare diverse serie di dati tutto quello che dovete fare è:

import matplotlib.pyplot as plt 
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]] 
y=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]] 
plt.plot(x[0],y[0],'r',x[1],y[1],'g',x[2],y[2],'b',x[3],y[3],'k') 

Si potrebbe automatizzare da avere una lista di colori come ['r','g','b','k'] e poi basta chiamare entrambe le voci in questo elenco e corrispondenti dati essere tracciato in un ciclo se lo si desidera. Se si desidera solo aggiungere a livello di codice serie di dati a una trama qualcosa di simile lo farà (nessuna nuova figura viene creato ogni volta in modo tutto è tracciata nella stessa figura):

import matplotlib.pyplot as plt 
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]] 
y=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]] 
colours=['r','g','b','k'] 
for i in range(len(x)): 
    plt.plot(x[i],y[i],colours[i]) 

Spero che questo aiuti. Se qualcosa di matplotlib ha un ottimo documentation page con un sacco di examples.

+0

Grazie per il tuo aiuto –

+0

stranamente anche se ho dovuto scrivere plt.pyplot.plot strano –

+0

Questo è strano, idk perché. Metto alla prova il mio codice prima di postare e per me funziona così com'è. –

0

Utilizzare un dizionario !!

È inoltre possibile utilizzare dizionari che ti permette di avere un maggiore controllo sulle piazzole:

import matplotlib.pyplot as plt 
# plot 0  plot 1 plot 2 plot 3 
x=[[1,2,3,4],[1,4,3,4],[1,2,3,4],[9,8,7,4]] 
y=[[3,2,3,4],[3,6,3,4],[6,7,8,9],[3,2,2,4]] 

plots = zip(x,y) 
def loop_plot(plots): 
    figs={} 
    axs={} 
    for idx,plot in enumerate(plots): 
     figs[idx]=plt.figure() 
     axs[idx]=figs[idx].add_subplot(111) 
     axs[idx].plot(plot[0],plot[1]) 
return figs, axs 

figs, axs = loop_plot(plots) 

Ora è possibile selezionare la trama che si desidera modificare con facilità:

axs[0].set_title("Now I can control it!") 
Problemi correlati