Plot DataFrames yang berbeda pada gambar yang sama

93

Saya memiliki file suhu dengan catatan suhu bertahun-tahun, dalam format seperti di bawah ini:

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

Setiap tahun memiliki angka yang berbeda, waktu pencatatan, sehingga indeks datetime panda berbeda.

Saya ingin memplot data tahun yang berbeda dengan gambar yang sama untuk perbandingan. Sumbu X adalah Jan hingga Des, sumbu Y adalah suhu. Bagaimana saya harus melakukan ini?

wuwucat.dll
sumber

Jawaban:

30

Meskipun jawaban Chang menjelaskan cara membuat plot beberapa kali pada gambar yang sama, dalam hal ini Anda mungkin lebih baik dalam hal ini menggunakan a groupbydan unstack:

(Dengan asumsi Anda memiliki ini di dataframe, dengan indeks datetime sudah)

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

Sekarang mudah untuk merencanakan (setiap tahun sebagai garis terpisah):

df.groupby(['Month','Year']).mean().unstack().plot()
Andy Hayden
sumber
345

Mencoba:

ax = df1.plot()
df2.plot(ax=ax)
Chang She
sumber
1
jika di notebook ipython, bagaimana cara mencapainya? apakah ada fungsi tahan atau tampilkan yang mencetak grafik hanya setelah semua pengaturan ditetapkan?
Diansheng
1
Atur %matplotlib inlinetempat Anda mengimpor sehingga visualisasi Anda muncul di dalam notebook iPython.
Hassan Baig
1
Adakah petunjuk bagaimana ini akan bekerja jika ada lebih dari 3 kerangka data?
RPT
Ini luar biasa. Saya akan menjawab bagaimana melakukannya dengan lebih dari 3
dfs
3
Apakah Anda yakin karya ini untuk semua jenis dari plot(), yaitu setiap kali ada jenis spesifikasi yang diberikan sebagai argumen ke plotfungsi?
tuan
27

Jika Anda menjalankan notebook Jupyter / Ipython dan mengalami masalah dalam menggunakan;

ax = df1.plot()

df2.plot(ax=ax)

Jalankan perintah di dalam sel yang sama !! Itu tidak akan, untuk beberapa alasan, bekerja ketika dipisahkan menjadi sel-sel berurutan. Setidaknya untuk saya.

Hamish Robertson
sumber
6

Untuk melakukan ini untuk beberapa kerangka data, Anda dapat melakukan perulangan for di atasnya:

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)
adivis12
sumber
0

Hanya untuk menyempurnakan jawaban @ adivis12, Anda tidak perlu melakukan ifpernyataan. Taruh seperti ini:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)
konse
sumber