2017-05-13 1 views
2

いくつかのdatetimeオブジェクトのヒストグラムをプロットしようとしていますが、ビンとバーが一列になることはありません。私のコードは以下の通りです:hist()関数を使用してdatetimeオブジェクトのヒストグラムにビンを整列できません

私は私のものを輸入して、開始、終了と一日のオブジェクトを宣言することで起動します。

import datetime 
import matplotlib.pyplot as plt 

end = datetime.date(2017,5,14) 
start = datetime.date(2017,5,8) 
one_day = datetime.timedelta(days = 1) 

その後、私は日付の任意のリストを宣言します。

date_list = [datetime.date(2017,5,14), datetime.date(2017,5,14), 
datetime.date(2017,5,14), datetime.date(2017,5,9), datetime.date(2017,5,13), 
datetime.date(2017,5,12), datetime.date(2017,5,11), 
datetime.date(2017,5,11), datetime.date(2017,5,9)] 

次に、開始日と終了日(この場合は1週間)の間の日数をリストに追加して、各日付をリストに追加します。

これは、曜日の一部がdate_listに現れない(このケースではスキップすることができますが、他のdate_listsに展開できるようにするためです)。

それから私は)(HISTをプロットします。私は、様々な+ 1のおよび範囲とビン・フォーマットの組み合わせと整列のすべての方法を試してみたが、日付はバーで一貫性のある場所に座ることはありません

plt.hist(date_list, bins = len(week)+1) 
plt.show() 

+0

を試してください。plt.hist(date_list、bins = len(week)+1、align = 'left') '' ' – kingmakerking

答えて

1

ビンの数を設定するだけで、ビンはデータの最初と最後の値の間に均等に分散されます。データは、例えば、 start値がないと、ビンは1日よりも小さくなります。

これを克服するには、bins引数に希望のビンを明示的に設定する必要があります。これはhistです。残念ながら、ここではdatetimesのリストを直接使用することはできませんので、datetimesを最初に数値に変換する必要があります。これは、matplotlibのmatplotlib.dates.date2numメソッドを使用して行うことができます。

完全な例:あなたは datetime.date(2017,5,15)に終了日を設定する場合がありますのでdatetime.date(2017,5,14)は、(2017,5,13)(2017,5,14)間のビンの一部であることを

import datetime 
import matplotlib.pyplot as plt 
from matplotlib.dates import date2num 

end = datetime.date(2017,5,14) 
start = datetime.date(2017,5,8) 
one_day = datetime.timedelta(days = 1) 

date_list = [datetime.date(2017,5,14), datetime.date(2017,5,14), 
datetime.date(2017,5,14), datetime.date(2017,5,9), datetime.date(2017,5,13), 
datetime.date(2017,5,12), datetime.date(2017,5,11), 
datetime.date(2017,5,11), datetime.date(2017,5,9)] 

week = [] 
for i in range((end-start).days+1): 
    week.append(start + (i)*one_day) 

numweek = date2num(week) 

plt.hist(date_list, bins = numweek, ec="k") 
plt.gcf().autofmt_xdate() 
plt.show() 

enter image description here

注意。

+0

ありがとうございました!私はこのことについて私の髪を裂いてきた – emily

関連する問題