如何让每个直方图 bin 显示每个 action/event/item 的频率?

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

我想绘制一个直方图,显示不同时间间隔内各种动作的频率。我想将动作的发生分为 10 分钟的间隔。

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')

上面每个动作都有对应的时间。现在,如果我执行以下操作,我会得到显示每 10 分钟间隔内的频率的直方图。所以这告诉我每个容器中发生了多少动作,但没有告诉我发生了哪些动作。

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

如何让每个容器显示每个动作的频率?

用你的数据,

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()

生产