พล็อต DataFrames ที่แตกต่างกันในรูปเดียวกัน


93

ฉันมีไฟล์อุณหภูมิที่มีบันทึกอุณหภูมิหลายปีในรูปแบบด้านล่าง:

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

ทุกปีจะมีตัวเลขเวลาที่บันทึกแตกต่างกันดังนั้นวันที่และเวลาของแพนด้าจึงแตกต่างกัน

ฉันต้องการพล็อตข้อมูลของปีที่ต่างกันในรูปเดียวกันเพื่อเปรียบเทียบ แกน X คือ ม.ค. ถึง ธ.ค. แกน Y คืออุณหภูมิ ฉันควรทำอย่างไร

คำตอบ:


29

แม้ว่าคำตอบของ Chang จะอธิบายถึงวิธีการพล็อตหลาย ๆ ครั้งในรูปเดียวกันในกรณีนี้คุณอาจจะดีกว่าในกรณีนี้โดยใช้ a groupbyand unstacking:

(สมมติว่าคุณมีสิ่งนี้ในดาต้าเฟรมที่มีดัชนีวันที่และเวลาอยู่แล้ว)

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

ตอนนี้มันง่ายที่จะพล็อต (แต่ละปีแยกเป็นบรรทัด):

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

346

ลอง:

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

1
ถ้าอยู่ในโน๊ตบุ๊ค ipython จะทำยังไงให้สำเร็จ มีฟังก์ชันพักหรือแสดงที่พิมพ์กราฟหลังจากตั้งค่าทั้งหมดแล้วหรือไม่?
Diansheng

1
กำหนด%matplotlib inlineตำแหน่งที่คุณจะนำเข้าเพื่อให้การแสดงภาพของคุณปรากฏขึ้นภายในสมุดบันทึก iPython
Hassan Baig

1
เบาะแสใด ๆ ที่จะใช้งานได้มีมากกว่า 3 ดาต้าเฟรมหรือไม่
RPT

นี่มันอัศจรรย์มาก. ฉันจะตอบว่าจะทำอย่างไรกับมากกว่า 3 dfs
adivis12

3
คุณแน่ใจว่างานนี้ได้ประเภทใด ๆของplot()คือเมื่อใดก็ตามที่ประเภทของรายละเอียดใด ๆ จะถูกส่งผ่านเป็นอาร์กิวเมนต์เข้าไปในplotฟังก์ชั่น?
เสนอราคา

27

หากคุณใช้โน้ตบุ๊ก Jupyter / Ipython และมีปัญหาในการใช้งาน;

ax = df1.plot()

df2.plot(ax=ax)

เรียกใช้คำสั่งภายในเซลล์เดียวกัน !! ด้วยเหตุผลบางอย่างมันจะไม่ทำงานเมื่อพวกมันถูกแยกออกเป็นเซลล์ตามลำดับ สำหรับฉันอย่างน้อย


6

หากต้องการทำสิ่งนี้สำหรับหลาย ๆ ดาต้าเฟรมคุณสามารถทำเพื่อวนซ้ำได้:

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

เพียงเพื่อเพิ่มคำตอบ @ adivis12 คุณไม่จำเป็นต้องทำifคำสั่ง วางไว้ดังนี้:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.