我正在尝试使用matplot来绘制由不同输入生成的特定分钟内的事件数。
大致类似于下面的屏幕截图,但仅显示一个简单的24小时。
我的部分问题是我不知道如何使用不完整的Y轴数据。例如,如果我只有2个事件,一个在04:04(y = 5),一个在13:22(y = 1),我如何在图表上显示整个24小时的时间呢?
我一直在尝试堆叠的histtype =步骤,但我没有取得任何进展,也找不到http://matplotlib.org/gallery.html
中的任何示例如果这种输出有更好的绘图仪,我也很乐意尝试。
由于
编辑:添加不完全符合我想要的示例。 需要它:(1)。在x轴上使用时间(2)。使用时间进行事件(3)。从0开始的条形图(4)。中间没有那条线(5)。稍后再添加不同颜色的不同事件
import matplotlib
# Force matplotlib to not use any Xwindows backend.
matplotlib.use('Agg')
import matplotlib.pyplot as plt
a = [1,2,5,6,9,11,15,17,18]
plt.hlines(1,0,24) # Draw a horizontal line
plt.eventplot(a, orientation='horizontal', colors='b')
plt.savefig('foo.png', bbox_inches='tight')
答案 0 :(得分:1)
我认为您希望使用plt.xlim
在几分钟内设置24小时的时间段,从而在x轴上创建0-1440的索引。然后,您可以追加高度等于y值的栏,并根据索引进行定位。
plt.figure(figsize=(29, 9))
hours = 24
mins = 60
xlabels = ['%02d:%02d' % (divmod(i, 60)) for i in range(0, mins * hours, 10)]
plt.xlim(0, hours * mins)
plt.ylim(0,6)
xdata_org = ['04:04', '13:22']
ydata = [5, 1]
def get_min(time):
l = time.split(':')
return int(l[0]) * 60 + int(l[1])
xdata = [get_min(i) for i in xdata_org]
plt.bar(xdata, ydata, width=1)
plt.xticks(range(0, hours * mins, 10), xlabels, rotation='vertical', fontsize=9)
plt.subplots_adjust(left=0.05, right=0.95, bottom=0.3)