同じ図に異なるデータフレームをプロットする


92

長年の温度記録を含む温度ファイルがあり、次のような形式です。

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

毎年、レコードの番号、時刻が異なるため、パンダのdatetimeindicesはすべて異なります。

比較するために、異なる年のデータを同じ図にプロットします。X軸は1月から12月で、Y軸は温度です。これを行うにはどうすればよいですか?

回答:


30

Changの答えは同じ図で複数回プロットする方法を説明していますが、この場合、a groupbyunstacking を使用した方がよい場合があります。

(これがデータフレームにあり、日時インデックスがすでにあると仮定します)

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

338

試してください:

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

1
それがipythonノートブックにある場合、それを達成する方法は?すべての設定が設定された後にのみグラフを印刷するホールドまたは表示機能はありますか?
Diansheng

1
%matplotlib inline視覚化がiPythonノートブック内に表示されるように、インポートする場所を設定します。
Hassan Baig 2017年

1
これがどのように機能するかの手がかりは、3つ以上のデータフレームがあったか?
RPT

これは素晴らしいです。3つ以上の
df

3
これはどのタイプplot()でもplot機能しますか?つまり、任意のタイプの仕様が引数として関数に渡されるたびに機能しますか?
2017

26

Jupyter / Ipythonノートブックを実行していて、使用に問題がある場合。

ax = df1.plot()

df2.plot(ax=ax)

同じセル内でコマンドを実行してください!! 何らかの理由で、それらが連続したセルに分離されている場合は機能しません。少なくとも私にとっては。


6

複数のデータフレームに対してこれを行うには、それらに対してforループを実行できます。

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.