les_mis

< box_annotation | back to Gallery | unemployment >

            inspect
            • Hover Tool
              from collections import OrderedDict
              
              import numpy as np
              
              from bokeh.plotting import figure, show, output_file
              from bokeh.models import HoverTool, ColumnDataSource
              from bokeh.sampledata.les_mis import data
              
              nodes = data['nodes']
              names = [node['name'] for node in sorted(data['nodes'], key=lambda x: x['group'])]
              
              N = len(nodes)
              counts = np.zeros((N, N))
              for link in data['links']:
                  counts[link['source'], link['target']] = link['value']
                  counts[link['target'], link['source']] = link['value']
              
              colormap = [
                  "#444444", "#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99",
                  "#e31a1c", "#fdbf6f", "#ff7f00", "#cab2d6", "#6a3d9a"
              ]
              
              xname = []
              yname = []
              color = []
              alpha = []
              for i, n1 in enumerate(nodes):
                  for j, n2 in enumerate(nodes):
                      xname.append(n1['name'])
                      yname.append(n2['name'])
              
                      a = min(counts[i,j]/4.0, 0.9) + 0.1
                      alpha.append(a)
              
                      if n1['group'] == n2['group']:
                          color.append(colormap[n1['group']])
                      else:
                          color.append('lightgrey')
              
              
              source = ColumnDataSource(
                  data=dict(
                      xname=xname,
                      yname=yname,
                      colors=color,
                      alphas=alpha,
                      count=counts.flatten(),
                  )
              )
              
              output_file("les_mis.html")
              
              p = figure(title="Les Mis Occurrences",
                  x_axis_location="above", tools="resize,hover,save",
                  x_range=list(reversed(names)), y_range=names)
              p.plot_width = 800
              p.plot_height = 800
              
              p.rect('xname', 'yname', 0.9, 0.9, source=source,
                   color='colors', alpha='alphas', line_color=None)
              
              p.grid.grid_line_color = None
              p.axis.axis_line_color = None
              p.axis.major_tick_line_color = None
              p.axis.major_label_text_font_size = "5pt"
              p.axis.major_label_standoff = 0
              p.xaxis.major_label_orientation = np.pi/3
              
              hover = p.select(dict(type=HoverTool))
              hover.tooltips = OrderedDict([
                  ('names', '@yname, @xname'),
                  ('count', '@count'),
              ])
              
              show(p)      # show the plot