如何让每个直方图 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()
生产
我想绘制一个直方图,显示不同时间间隔内各种动作的频率。我想将动作的发生分为 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()
生产