2016-08-26 14 views
0

私は3列のパンダデータフレームを持っています。 col1をY軸にプロットし、time_stamps系列をX軸にプロットします。 このシリーズでは、col2が-1のときはいつも、グラフのその点を異常として強調したいと思います。 ax.textを使用して座標を取得しようとしましたが、X軸が時系列であるため正しい座標を取得できません。下の例では、col2 [2] == - 1以降の3行目の座標をプロットしようとしています。timeseriesのmatplotlibを使ってグラフにポイントをつける

import pandas 
import matplotlib.pyplot as plt 
df=df[["time_stamps","col1"]] 
df.set_index("time_stamps",inplace=True) 
ax=df.plot() 
ticklabels = [l.get_text() for l in ax.xaxis.get_ticklabels()] 
new_labels=[tick[-6:] for tick in ticklabels] 
ax.xaxis.set_ticklabels(new_labels) 
x1="16965 days 17:52:03" 
y1=0.7 
ax.text(x1, y1, "anaomly", fontsize=15) 
plt.show() 

サンプル・データが

time_stamp=[16965 days 17:52:00,16965 days 17:52:02 
16965 days 17:52:03,16965 days 17:52:05 
16965 days 17:52:06,16965 days 17:52:08 
16965 days 17:52:09,16965 days 17:52:11 
16965 days 17:52:12,16965 days 17:52:14] 
col1=[0.02,0.01,0.7,0.019,0.019,0.017,0.023,0.04,0.072,0.05] 
col2=[1,1,-1,1,1,1,1,1,1,1] 

答えて

1

のように見える私は秒に変換してから異常としてのポイントにラベルを付けることができ、それを考え出しました。これは私がやったことです。

def changetotimedelta(row): 
    return pd.to_timedelta(row["time_stamps"])/ np.timedelta64(1,'D') 
def main() 
df=pd.read_csv(inputFile)  
df["time"]=df.apply(changetotimedelta,axis=1) 
new_df=df[["time","col1"]] 
new_df.set_index("time",inplace=True) 
ax=new_df.plot() 
x1=pd.to_timedelta("16965 days 17:52:03")/ np.timedelta64(1,'D') 
y1=0.7 
ax.annotate('anomaly', xy=(x1, y1), xytext=(x2, 1), 
      arrowprops=dict(facecolor='red', shrink=0.01),) 

plt.show() 
関連する問題