2015-09-23 43 views
5

Tôi đang cố gắng vẽ một ô bảng với nhiều ô ảnh từ dữ liệu trong khung dữ liệu gấu trúc. Các cột của dataframe trông như thế này:nhiều ô từ Pandas dataframe

data.columns 
Index([u'SiteId', u'obs1', u'obs2', u'obs3', u'obs4', u'obs5', u'obs6', u'date', u'area'] 

Tôi muốn tạo ra một bảng điều khiển của 9 lô khác nhau (kể từ khi có 9 khu vực địa lý khác nhau) mỗi trong số đó có 12 boxplots cho từng tháng trong năm. Một ví dụ được trình bày dưới đây với các đoạn mã sử dụng để tạo ra các âm mưu:

df = data.ix[:, ['obs1','date', 'area']] 
df = df.set_index('date') 
colm = ['LOCATION 1'] 
for area in areas: 
    df2 = df.loc[(df.area== area)] 
    df2.boxplot(column=colm, by=df2.index.month, showmeans=True) 

kết quả mã trên trong một con số duy nhất (với boxplots tương ứng với mỗi tháng trong hình vẽ), nhưng tôi muốn tạo 9 lô như vậy mỗi tương ứng với một khu vực cụ thể dưới dạng các ô con trong cùng một ô. Nói cách khác, tôi muốn nhóm dữ liệu đầu tiên theo vùng, sau đó theo tháng của năm và sau đó vẽ kết quả là ô mẫu. Bất kỳ suy nghĩ làm thế nào tôi có thể nhận được các lô mong muốn? Bất kỳ trợ giúp được đánh giá cao.

Ngoài ra, làm cách nào tôi có thể loại bỏ "Boxplot được nhóm theo [1 1 1 ... 12 12 12]" và "1,1,1,1,1,1,1,1,1 ,. .... "cả ở đầu và cuối cốt truyện?

Tôi không thể đăng hình ảnh vì quy tắc lưu lượng truy cập ngăn xếp không cho phép tôi. Cảm ơn.

+0

nếu bạn có thể cung cấp một khung dữ liệu đơn giản với dữ liệu giả để phát xung quanh, điều đó sẽ hữu ích. Tôi nghi ngờ 9 con số của bạn thực sự là tạo ra, nhưng mỗi con số được ghi đè bởi kế tiếp. Bạn có thể thử tạo một hình mới trong vòng lặp của bạn, và bạn sẽ nhận được 9 số liệu khác nhau. Nếu bạn muốn vẽ tất cả 9 khu vực trong cùng một hình, bạn nên tạo một ô phụ 9x12 và lô trên các trục liên quan trong vòng lặp của bạn –

+0

Cảm ơn Diziet, tôi đã thử điều đó nhưng nó không hoạt động. Dưới đây là dữ liệu mẫu (mặc dù nó chỉ là một vài ngày nhưng ngày này bao gồm cả năm và có 9 khu vực như vậy). : ngày khu vực Obs1 2011-01-03 95,213458 4 2011-01-15 85,360990 5 2011-01-18 84,556772 5 2011-01-21 50,630212 6 2011-01-24 85,118985 3 2011-01- 27 7.944901 1 2011-01-30 56.947048 3 2011-01-03 89.431410 6 2011-01-06 7.979408 6 – Vakratund

Trả lời

1

Điều này có làm những gì bạn muốn không?

fig, axs = plt.subplots(len(areas), 1, figsize=(5,45)) 
for ax,area in zip(axs,areas): 
    df2 = df.loc[(df.area==area)] 
    df2.boxplot(column=['obs1'], by=df2.index.month, showmeans=True, ax=ax) 
+0

Cảm ơn Diziet Asahi! Điều này hoạt động tốt. – Vakratund