les_mis.py — Anaconda Enterprise 4.4 documentation

Anaconda Enterprise: Documentation

# les_mis.py

    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, node1 in enumerate(nodes):
        for j, node2 in enumerate(nodes):
            xname.append(node1['name'])
            yname.append(node2['name'])

            alpha.append(min(counts[i,j]/4.0, 0.9) + 0.1)

            if node1['group'] == node2['group']:
                color.append(colormap[node1['group']])
            else:
                color.append('lightgrey')

    source = ColumnDataSource(data=dict(
        xname=xname,
        yname=yname,
        colors=color,
        alphas=alpha,
        count=counts.flatten(),
    ))

    p = figure(title="Les Mis Occurrences",
               x_axis_location="above", tools="hover,save",
               x_range=list(reversed(names)), y_range=names)

    p.plot_width = 800
    p.plot_height = 800
    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

    p.rect('xname', 'yname', 0.9, 0.9, source=source,
           color='colors', alpha='alphas', line_color=None,
           hover_line_color='black', hover_color='colors')

    p.select_one(HoverTool).tooltips = [
        ('names', '@yname, @xname'),
        ('count', '@count'),
    ]

    output_file("les_mis.html", title="les_mis.py example")

    show(p) # show the plot