2017-08-31 5 views
2

私は1週間のデータを含むデータフレームで作業しています。 Weekly data ラベルは内のデータを反映しているように、プロットが正しい: 時系列をプロットするときにラベルが間違っていますmatplotlibでpandasデータフレーム

      y 
ds        
2017-08-31 10:15:00 1.000000 
2017-08-31 10:20:00 1.049107 
2017-08-31 10:25:00 1.098214 
... 
2017-09-07 10:05:00 99.901786 
2017-09-07 10:10:00 99.950893 
2017-09-07 10:15:00 100.000000 

私はこのデータのプロットは以下の通りです平日と時間すなわち

   y 
dayIndex    
4 - 10:15 1.000000 
4 - 10:20 1.049107 
4 - 10:25 1.098214 
... 
4 - 10:05 99.901786 
4 - 10:10 99.950893 
4 - 10:15 100.000000 

を組み合わせることによって、新しいインデックスを作成しますデータフレーム。ただし、拡大表示すると、元の値に対応しないため、ラベルが正しく表示されないように見えます。 Wrong labels when zooming この現象の原因は何ですか?ここで

は、この再現するためのコードです: "?この動作を引き起こしているもの"

import datetime 
import numpy as np 
import pandas as pd 

dtnow = datetime.datetime.now() 
dindex = pd.date_range(dtnow , dtnow + datetime.timedelta(7), freq='5T') 
data = np.linspace(1,100, num=len(dindex)) 
df = pd.DataFrame({'ds': dindex, 'y': data}) 
df = df.set_index('ds') 
df = df.resample('5T').mean() 
df['dayIndex'] = df.index.strftime('%w - %H:%M') 
df= df.set_index('dayIndex') 
df.plot() 

答えて

1

パンダ日付プロットの軸のフォーマッタはmatplotlib.ticker.FixedFormatter(例えば print plt.gca().xaxis.get_major_formatter()を参照します)。 「固定」とは、一定の文字列でi目盛り(表示されている場合)をフォーマットすることを意味します。
ズームやパンでは、ティックの位置を移動しますが、フォーマット文字列は移動しません。
要約:パンダの日付プロットは、インタラクティブプロットのためには最適ではないかもしれません。

ソリューション

ソリューションは、直接matplotlibのフォーマッタを使用することが通常です。これは、日付がdatetimeオブジェクト(df.index.to_pydatetime()を使用して保証できる)であることを必要とします。

import datetime 
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.dates 

dtnow = datetime.datetime.now() 
dindex = pd.date_range(dtnow , dtnow + datetime.timedelta(7), freq='110T') 
data = np.linspace(1,100, num=len(dindex)) 
df = pd.DataFrame({'ds': dindex, 'y': data}) 
df = df.set_index('ds') 
df.index.to_pydatetime() 
df.plot(marker="o") 


plt.gca().xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%w - %H:%M')) 
plt.show() 

enter image description here

+0

どのようにフォーマット文字列は、ダニと一緒にシフトしていない来ますか?これが設計によるのか、これが問題として報告されるべきかをご存じですか?私は私の元のコードを参照しています。あなたが投稿した作品は素晴らしい作品です。 – Demetris

+1

'FixedFormatter'がラベルのインデックスにバインドされるようにラベルを固定するというのは、意図的なものです(したがって、名前)。 pandas datetimeがFixedFormatterを使用*する*という事実が問題と見なされるかどうかは、たぶん味の問題です。それにはいくつかの利点がありますが、望ましくない場合があります。私はそれをバグと呼んではいないでしょうが、もしあなたが好きなら、それを*機能要求*として確かに報告するかもしれません。 – ImportanceOfBeingErnest

関連する問題