12
votes

I am trying to plot a histogram of datetime.time values. Where these values are discretized into five minute slices. The data looks like this, in a list:

['17:15:00', '18:20:00', '17:15:00', '13:10:00', '17:45:00', '18:20:00']

I would like to plot a histogram, or some form of distribution graph so that the number of occurrences of each time can be examined easily.

NB. Given each time is discretised then. The maximum number of bins in a histogram would be 288 = (60 / 5 * 24)

I have looked at matplotlib.pyplot.hist. But is requires some sort of continuous scalar

2
The simplest might be to convert the times to seconds and use this to make the histogram. You could then change the labels of the histogram manually. - David Zwicker
Or convert the times to bins directly = seconds/300, and plot the count of each bin. - Dave

2 Answers

9
votes

I did what David Zwicker said and used seconds, and then changed the x axis. I will look at what Dave said about 'bins'. This works roughly and gives a bar per hour plot to start with.

def chart(occurance_list):
    hour_list = [t.hour for t in occurance_list]
    print hour_list
    numbers=[x for x in xrange(0,24)]
    labels=map(lambda x: str(x), numbers)
    plt.xticks(numbers, labels)
    plt.xlim(0,24)
    plt.hist(hour_list)
    plt.show()

frequency of lowest daily exahange rate for GBPUSD

-8
votes

you have to convert the data in two variable and then you can use plotlab to plot in histograms.