Vẽ các DataFrames khác nhau trong cùng một hình


92

Tôi có một tệp nhiệt độ với các bản ghi nhiệt độ nhiều năm, ở định dạng như sau:

2012-04-12,16:13:09,20.6
2012-04-12,17:13:09,20.9
2012-04-12,18:13:09,20.6
2007-05-12,19:13:09,5.4
2007-05-12,20:13:09,20.6
2007-05-12,20:13:09,20.6
2005-08-11,11:13:09,20.6
2005-08-11,11:13:09,17.5
2005-08-13,07:13:09,20.6
2006-04-13,01:13:09,20.6

Mỗi năm có những con số, thời gian của các bản ghi khác nhau, vì vậy chỉ số ngày giờ của gấu trúc cũng khác nhau.

Tôi muốn vẽ dữ liệu của các năm khác nhau trong cùng một hình để so sánh. Trục X là từ tháng 1 đến tháng 12, trục Y là nhiệt độ. Tôi nên làm như thế nào về việc này?

Câu trả lời:


30

Mặc dù câu trả lời của Chang giải thích cách vẽ nhiều lần trên cùng một hình, trong trường hợp này, bạn có thể tốt hơn trong trường hợp này bằng cách sử dụng a groupbyunstacking:

(Giả sử bạn có cái này trong dataframe, với chỉ mục datetime đã có)

In [1]: df
Out[1]:
            value  
datetime                         
2010-01-01      1  
2010-02-01      1  
2009-01-01      1  

# create additional month and year columns for convenience
df['Month'] = map(lambda x: x.month, df.index)
df['Year'] = map(lambda x: x.year, df.index)    

In [5]: df.groupby(['Month','Year']).mean().unstack()
Out[5]:
       value      
Year    2009  2010
Month             
1          1     1
2        NaN     1

Bây giờ, thật dễ dàng để lập biểu đồ (mỗi năm là một dòng riêng biệt):

df.groupby(['Month','Year']).mean().unstack().plot()

338

Thử:

ax = df1.plot()
df2.plot(ax=ax)

1
nếu nó là trên máy tính xách tay ipython, làm thế nào để đạt được nó? có chức năng giữ hoặc hiển thị chỉ in biểu đồ sau khi tất cả các cài đặt được thiết lập không?
Diansheng

1
Đặt %matplotlib inlinenơi bạn thực hiện nhập để hình ảnh của bạn hiển thị bên trong máy tính xách tay iPython.
Hassan Baig

1
Bất kỳ manh mối nào về cách điều này sẽ hoạt động là có hơn 3 khung dữ liệu?
RPT

Thật đáng kinh ngạc. Tôi sẽ trả lời cho cách làm với hơn 3 dfs
adivis12

3
Bạn có chắc tác phẩm này cho bất kỳ loại của plot(), cụ thể là bất cứ khi nào bất kỳ loại thông số kỹ thuật được thông qua như là đối số vào plotchức năng?
gented

26

Nếu bạn đang chạy máy tính xách tay Jupyter / Ipython và gặp sự cố khi sử dụng;

ax = df1.plot()

df2.plot(ax=ax)

Chạy lệnh bên trong cùng một ô !! Vì một số lý do, nó sẽ không hoạt động khi chúng được tách thành các ô tuần tự. Cho tôi ít nhất.


6

Để thực hiện việc này cho nhiều khung dữ liệu, bạn có thể thực hiện lặp for trên chúng:

fig = plt.figure(num=None, figsize=(10, 8))
ax = dict_of_dfs['FOO'].column.plot()
for BAR in dict_of_dfs.keys():
    if BAR == 'FOO':
        pass
    else:
        dict_of_dfs[BAR].column.plot(ax=ax)

0

Chỉ để nâng cao câu trả lời @ adivis12, bạn không cần phải thực hiện ifcâu lệnh. Đặt nó như thế này:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.