Abhishek Bhatia
Abhishek Bhatia

Reputation: 9806

Plot datetime histogram in python with bar size as number of hours/minutes

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. enter image description here

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

Answers (1)

j08lue
j08lue

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

Related Questions