{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "URL: https://docs.bokeh.org/en/latest/docs/examples/topics/categorical/les_mis.html" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import holoviews as hv\n", "from holoviews import opts\n", "hv.extension('bokeh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Declare data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from bokeh.sampledata.les_mis import data\n", "\n", "nodes = data['nodes']\n", "names = [node['name'] for node in sorted(data['nodes'], key=lambda x: x['group'])]\n", "\n", "N = len(nodes)\n", "counts = np.zeros((N, N))\n", "for link in data['links']:\n", " counts[link['source'], link['target']] = link['value']\n", " counts[link['target'], link['source']] = link['value']\n", " \n", "xname, yname, color, alpha = [], [], [], []\n", "for i, node1 in enumerate(nodes):\n", " for j, node2 in enumerate(nodes):\n", " xname.append(node1['name'])\n", " yname.append(node2['name'])\n", "\n", " alpha.append(counts[i,j])\n", "\n", " if node1['group'] == node2['group']:\n", " color.append(node1['group'])\n", " else:\n", " color.append('lightgrey')\n", "\n", "ds = hv.Dataset((xname, yname, color, alpha), ['x', 'y', 'Cluster', 'Occurences'])\n", "overlaid = ds.to(hv.HeatMap, ['x', 'y'], ['Occurences']).overlay()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "cmaps = ['Greys', 'Reds', 'Greys', 'Greens', 'Blues',\n", " 'Purples', 'Oranges', 'Greys', 'Greys', 'PuRd', 'Reds', 'Greys']\n", "\n", "combined = hv.Overlay([o.opts(cmap=cm).sort() for o, cm in zip(overlaid, cmaps)], label='LesMis Occurences')\n", "styled = combined.opts(\n", " opts.HeatMap(logz=True, clim=(0.1, None), clipping_colors={'NaN':(1,1,1,0.)}, xaxis='top', xrotation=90,\n", " fontsize={'ticks': '7pt', 'title': '18pt'}, invert_xaxis=True, tools=['hover'],\n", " labelled=[], axiswise=True),\n", " opts.Overlay(height=800, width=800)\n", ")\n", "styled" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hv.Layout([el.opts(width=300, height=300) for el in styled if len(el)>10][:-1],\n", " label='LesMis Large Clusters').cols(3)" ] } ], "metadata": { "language_info": { "name": "python", "pygments_lexer": "ipython3" } }, "nbformat": 4, "nbformat_minor": 4 }