yscale2 = zip([(9.2) for x in range(len(levelsdf2[name, 'Start']))], [(9.2) for
    x in range(len(levelsdf2[name, 'Start']))])
TOOLS = 'pan,wheel_zoom,box_zoom,reset,hover'
output_file('linesandquads.html')
hover_tips = levelsdf2.index.values
colors = [('#%06x' % random.randint(0, 16777215)) for c in range(len(xscale))]
proc1 = 'Log'
proc2 = 'MazF2h'
expression1 = levelsdf2[proc1, 'Level']
expression2 = levelsdf2[proc2, 'Level']
source = ColumnDataSource(data=dict(start=[min(xscale[x]) for x in range(
    len(xscale))], stop=[max(xscale[x]) for x in range(len(xscale))],
    start2=[min(xscale2[x]) for x in range(len(xscale2))], stop2=[max(
    xscale2[x]) for x in range(len(xscale2))], gene=hover_tips, colors=
    colors, expression1=expression1, expression2=expression2))
p1 = figure(plot_width=900, plot_height=500, y_range=[8, 10.5], tools=TOOLS)
p1.quad(left='start', right='stop', top=[(9.211) for x in range(len(xscale)
    )], bottom=[(9.209) for x in range(len(xscale))], source=source, color=
    'colors')
p1.multi_line(xscale2, yscale2, source=source, color='colors', line_width=20)
hover = p1.select(dict(type=HoverTool))
hover.tooltips = OrderedDict([(proc1 + ' (start,stop, expression)',
    '(@start| @stop| @expression1)'), ('Gene', '@gene')])
show(p1)
Bokeh hovertool на графике с несколькими линиями