【问题标题】:How do I make each histogram bin show me the frequency of each action/event/item?如何让每个直方图箱显示每个动作/事件/项目的频率?
【发布时间】:2026-01-10 04:45:01
【问题描述】:

我想绘制一个直方图,显示不同时间间隔内各种动作的频率。我想将动作的发生分为 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 分钟间隔时间频率的直方图。所以这告诉我每个 bin 中发生了多少操作,但不告诉我发生了哪些操作。

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

如何让每个 bin 显示每个操作的频率?

【问题讨论】:

标签: python-3.x matplotlib histogram


【解决方案1】:

用你的数据,

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

生产

【讨论】:

    最近更新 更多