2017-05-18 13 views
1

私は1つのパンダのデータフレーム(a)から2つのグラフを重ねてプロットしたいと思います。matplotlibで1つのデータフレームを使って2つのグラフをプロットする方法はありますか?

これはデータフレーム(a)の一部です。

     Temperature 
DateTime 
2017-05-01 07:20:00 49.15 
2017-05-01 07:19:00 49.14 
2017-05-01 07:18:00 49.15 
2017-05-01 07:17:00 49.14 
2017-05-01 07:16:00 49.14 
2017-05-01 07:15:00 49.15 
2017-05-01 07:14:00 49.15 
2017-05-01 07:13:00 49.15 
2017-05-01 07:12:00 49.16 
2017-05-01 07:11:00 49.17 
2017-05-01 07:10:00 49.18 
2017-05-01 07:09:00 49.16 
2017-05-01 07:08:00 49.15 
2017-05-01 07:07:00 49.15 
2017-05-01 07:06:00 49.16 
2017-05-01 07:05:00 49.19 
2017-05-01 07:04:00 49.19 
2017-05-01 07:03:00 49.20 
2017-05-01 07:02:00 49.21 
2017-05-01 07:01:00 49.15 

まず、グラフをタイムリーにプロットしたいと思います。第二に、ある条件を満たす点をプロットすることです。たとえば、+ 5行の範囲内で最も高い値の各テンターをプロットしたいとします。私はこの状態のために作った機能を以下に示します。

def HIGH(a, span): 
    for m in range(span, len(a)-span): 
     temp_df = a.iloc[m-span:m+span] 

     if a.iloc[m] == pd.DataFrame.max(temp_df, axis=0): 
      print(a.index.values[m]) 
      print(a.iloc[m]) 

>>> HIGH(a, 5) 
2017-05-01T07:10:00.000000000 
49.18 

>>> matplotlib.pyplot.plot(a) 
>>> matplotlib.pyplot.show() 

は以下のグラフを示していますが、どのようにポイント( 'rx'オプション付き)をマークできますか?

enter image description here

答えて

2

あなたはHIGH関数から値を返すと、マーカーでそれらをプロットする必要があります。

import io 
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 


u = u"""DateTime;Temperature 
2017-05-01 07:20:00;49.15 
2017-05-01 07:19:00;49.14 
2017-05-01 07:18:00;49.15 
2017-05-01 07:17:00;49.14 
2017-05-01 07:16:00;49.14 
2017-05-01 07:15:00;49.15 
2017-05-01 07:14:00;49.15 
2017-05-01 07:13:00;49.15 
2017-05-01 07:12:00;49.16 
2017-05-01 07:11:00;49.17 
2017-05-01 07:10:00;49.18 
2017-05-01 07:09:00;49.16 
2017-05-01 07:08:00;49.15 
2017-05-01 07:07:00;49.15 
2017-05-01 07:06:00;49.16 
2017-05-01 07:05:00;49.19 
2017-05-01 07:04:00;49.19 
2017-05-01 07:03:00;49.20 
2017-05-01 07:02:00;49.21 
2017-05-01 07:01:00;49.15""" 

data = io.StringIO(u) 
df = pd.read_csv(data, sep=";", index_col=0) 
df.index = pd.to_datetime(df.index) 


def HIGH(a, span): 
    x,y = [],[] 
    for m in range(span, len(a)-span): 
     temp_df = a.iloc[m-span:m+span] 
     cur = float(pd.DataFrame.max(temp_df, axis=0)) 
     if float(a.iloc[m]) == cur: 
      x.append(a.index.values[m]) 
      y.append(float(a.iloc[m])) 
    return x,y 

plt.plot(df) 
x,y = HIGH(df,5) 
plt.plot(x,y, marker="*", color="crimson", ls="", ms=15) 
plt.show() 

enter image description here

+0

ありがとうございました! – maynull

関連する問題