How do I make each histogram bin show me the frequency of each action/event/item?

61 Views Asked by At

I want to plot a histrogram showing the frequencies of various actions at different intervals. I want to bin the occurence of actions into 10 minute intervals.

binwidth = 10*60 #10 minutes
times = array([  1.43431325e+09,   1.43431325e+09,   1.43431329e+09,
     1.43431330e+09,   1.43431333e+09,   1.43431334e+09,
     1.43431345e+09,   1.43431346e+09,   1.43431346e+09,
     1.43431346e+09,   1.43431349e+09,   1.43431350e+09,
     1.43431350e+09,   1.43431351e+09,   1.43431354e+09,
     1.43431354e+09,   1.43431354e+09,   1.43431355e+09,
     1.43431355e+09,   1.43431356e+09,   1.43431356e+09,
     1.43431356e+09,   1.43431360e+09,   1.43431360e+09,
     1.43431366e+09,   1.43431366e+09,   1.43431378e+09,
     1.43431378e+09,   1.43431385e+09,   1.43431385e+09,
     1.43431386e+09,   1.43431386e+09,   1.43431389e+09,
     1.43431390e+09,   1.43431390e+09,   1.43431390e+09,
     1.43431394e+09,   1.43431394e+09,   1.43431398e+09,
     1.43431399e+09,   1.43431404e+09,   1.43431404e+09,
     1.43431422e+09,   1.43431422e+09,   1.43431423e+09,
     1.43431423e+09,   1.43431424e+09,   1.43431424e+09,
     1.43431425e+09,   1.43431425e+09,   1.43431425e+09,
     1.43431425e+09,   1.43431426e+09,   1.43431426e+09,
     1.43431426e+09,   1.43431427e+09,   1.43431427e+09,
     1.43431428e+09,   1.43431428e+09,   1.43431428e+09,
     1.43431430e+09,   1.43431430e+09,   1.43431440e+09,
     1.43431440e+09,   1.43431475e+09,   1.43431475e+09,
     1.43431479e+09,   1.43431479e+09,   1.43431482e+09,
     1.43431482e+09,   1.43431484e+09,   1.43431485e+09,
     1.43431515e+09,   1.43431515e+09,   1.43431566e+09,
     1.43431567e+09,   1.43431568e+09,   1.43431568e+09,
     1.43431570e+09,   1.43431570e+09,   1.43431575e+09,
     1.43431576e+09,   1.43431577e+09,   1.43431577e+09,
     1.43431688e+09,   1.43431689e+09])

actions = array(['entry', 'exit', 'entry', 'exit', 'entry', 'exit', 'entry', 'exit',
   'entry', 'exit', 'entry', 'exit', 'entry', 'exit', 'entry', 'exit',
   'entry', 'exit', 'entry', 'exit', 'entry', 'exit', 'entry', 'exit',
   'entry', 'exit', 'entry', 'exit', 'entry', 'exit', 'entry', 'exit',
   'entry', 'exit', 'entry', 'exit', 'entry', 'exit', 'entry', 'exit',
   'entry', 'exit', 'entry', 'check+', 'reward', 'reward', 'reward',
   'reward', 'reward', 'complete', 'exit', 'entry', 'check+',
   'reward', 'reward', 'reward', 'reward', 'reward', 'complete',
   'exit', 'entry', 'exit', 'entry', 'exit', 'entry', 'exit', 'entry',
   'exit', 'entry', 'exit', 'entry', 'exit', 'entry', 'exit', 'entry',
   'exit', 'entry', 'exit', 'entry', 'exit', 'entry', 'exit', 'entry',
   'exit', 'entry', 'exit'], 
  dtype='|S9')

In the above each action has a corresponding time. Now if I do the following I get the histrogram showing the frequency of times in each 10 minute interval. So this tells me how many actions occured in each bin but doesn't tell me which actions occurred.

plt.hist(times, bins=np.arange(min(times), max(times) + binwidth, binwidth))

Histrogram

How do I make each bin show me the frequency of each action?

1

There are 1 best solutions below

0
On BEST ANSWER

with your data,

cases = list(set(actions))

fig, ax = plt.subplots() 
ax.hist(map(lambda x: times[actions==x], cases),
        bins=np.arange(min(times), max(times) + binwidth, binwidth),
        histtype='bar', stacked=True, label=cases) 
ax.legend()

plt.show()

produces

enter image description here