If you compute the start and end for each event, then there is nothing for Bokeh to stack, you’ve already done all the work necessary. The hbar glyph is vectorized and will draw a bar for every pair of start/end coordinates you specify:
source = ColumnDataSource(data={
'start': start_times,
'end': end_times,
'event': event_types,
})
cmap = factor_cmap('event',
palette=list_of_colors_for_each_event_type,
factors=list_of_all_unique_event_types)
p.hbar(y=..., left='start', right='end', color=cmap, source=source)
It’s not clear from your description what y should be here. If you just need one “stacked” bar, then you could set y equal to a single fixed value right in the call to hbar. If your data has bars that correspond to multiple y values then you would want to make a "y" column in the data source that provides the associated y-coordinate for each bar, then set y="y".
Important reminder: each item in a column of a CDS corresponds to some attribute of one of the bars, which is why all columns in a given CDS must always be the same length
As an aside, there is an hbar_stack method that it seems like you might be wanting to use, but I do not think it is appropriate for this use case.