Reputation: 9806
I want to write a code in python which plot a datetime histogram taking the bar size as number of hours.
I have tried some code but it shows incorrect results. There is some blunder I am doing in bin size I don't get it.
numtime = [date2num(t) for t in x]
# plotting the histogram
ax = figure().gca()
_, _, patches = hist(numtime, bins=24,alpha=.5)
# adding the labels for the x axis
tks = [num2date(p.get_x()) for p in patches]
xticks(tks,rotation=40)
# formatting the dates on the x axis
ax.xaxis.set_major_formatter(DateFormatter('%d %b %H:%M'))
show()
x is <type 'numpy.ndarray'> of datetime
I have just started learning python. Can someone please help.
Few x values for reproducing:
[datetime.datetime(2015, 6, 26, 1, 36)
datetime.datetime(2015, 6, 26, 1, 31)
datetime.datetime(2015, 6, 26, 0, 36)
datetime.datetime(2015, 6, 25, 16, 43)
datetime.datetime(2015, 6, 25, 16, 30)
datetime.datetime(2015, 6, 21, 4, 0)
datetime.datetime(2015, 6, 19, 17, 2)
datetime.datetime(2015, 6, 19, 16, 56)
datetime.datetime(2015, 6, 19, 15, 2)
datetime.datetime(2015, 6, 19, 0, 30)
datetime.datetime(2015, 6, 1, 21, 34)
datetime.datetime(2015, 5, 25, 22, 49)
datetime.datetime(2015, 5, 21, 23, 35)
datetime.datetime(2015, 4, 22, 4, 20)
datetime.datetime(2015, 1, 23, 17, 31)
datetime.datetime(2015, 1, 23, 12, 23)
datetime.datetime(2015, 1, 23, 9, 53)
datetime.datetime(2015, 1, 23, 9, 29)
datetime.datetime(2015, 1, 23, 8, 42)
datetime.datetime(2015, 1, 23, 4, 36)
datetime.datetime(2015, 1, 23, 1, 45)
datetime.datetime(2015, 1, 22, 22, 59)
datetime.datetime(2015, 1, 22, 20, 34)
datetime.datetime(2015, 1, 22, 20, 4)
datetime.datetime(2015, 1, 22, 20, 0)
datetime.datetime(2015, 1, 22, 19, 34)
datetime.datetime(2015, 1, 22, 19, 16)
datetime.datetime(2015, 1, 22, 15, 48)
datetime.datetime(2015, 1, 22, 13, 31)]
]
Upvotes: 0
Views: 2426
Reputation: 1706
Summarizing my comments above:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.dates import num2date
# interval width
nhours = 24
# convert datetime instances in `x` to hours since reference date
numtime = date2num(x)/24.
# bins for histogram
bins = np.arange(numtime.min(), numtime.max()+1, nhours)
# plotting the histogram
fig, ax = plt.subplots()
ax.hist(numtime, bins=bins, alpha=.5)
# label the ticks somehow
# ...
Upvotes: 1