2013-10-04 14 views
11

Mam zestaw danych, które ładuję do Pythona przy użyciu pandas danych. Chciałbym stworzyć pętlę, która wydrukuje wykres dla wszystkich elementów we własnej ramce, a nie na jednym. Moje dane w pliku excel zorganizowany w ten sposób:Użyj pętli do n wykresów Python

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

To co mam kodu do tej pory:

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) 

mam na myśli zrobienie czegoś takiego:

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

Powyższe nie było na tyle, na czym chciałem i wynika to z mojej nieznajomości Pand, MatplotLib itp., Patrząc na jakąś dokumentację chociaż dla mnie wygląda na to, że matplotlib nie jest nawet potrzebny (pytanie 2)

Tak A) Jak mogę wygenerować wykres danych dla każdej kolumny w moim df i B) czy muszę użyć matplotlib, czy powinienem po prostu użyć pand, aby zrobić to wszystko?

Dziękuję

+0

może po prostu ekstra serię do wykresu dla każdej kolumny lub utwórz osobny wykres dla każdego. Wolisz to drugie, jak sądzę? Ponadto 'matplotlib' jest dość standardowym modułem do tworzenia działek, całkiem łatwym w użyciu i działającym jak marzenie. –

+1

To naprawdę nie ma znaczenia, to tylko po to, aby mnie używać i ćwiczyć, czy konwencja dyktowałaby jedną metodę nad drugą? –

Odpowiedz

18

Ok, więc najprostszym sposobem na stworzenie kilku działek to:

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

pamiętać, że konieczne jest utworzenie figure za każdym razem lub pyplot będzie wykreślić w pierwszej utworzonej .

Jeśli chcesz utworzyć kilka serii danych, wszystko co musisz zrobić, to:

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

Można zautomatyzować poprzez listę kolorach jak ['r','g','b','k'] a potem po prostu dzwoniąc obie pozycje na tej liście, a odpowiednie dane do wykreślenia w pętli, jeśli chcesz. Jeśli chcesz tylko programowo dodać serię danych na jednej działce coś jak to będzie to zrobić (nie nowy rysunek jest tworzony za każdym razem, więc wszystko jest naniesiona na tym samym rysunku):

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

Nadzieja to pomaga. Jeśli cokolwiek matplotlib ma bardzo dobry documentation page z dużą ilością examples.

+0

Dzięki za pomoc –

+0

dziwne, chociaż musiałem napisać plt.pyplot.plot dziwne –

+0

To dziwne, idk dlaczego. Testuję mój kod przed wysłaniem, a dla mnie działa tak jak jest. –

0

Użyj słownika !!

Można również korzystać ze słowników, które pozwala na większą kontrolę nad działek:

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) 

Teraz można wybrać wykres, który chcesz zmodyfikować łatwo:

axs[0].set_title("Now I can control it!") 
Powiązane problemy