{ "metadata": { "kernelspec": { "codemirror_mode": { "name": "python", "version": 3 }, "display_name": "Python 3", "language": "python", "name": "python3" }, "name": "", "signature": "sha256:96ed2d815bbd6eaee085469098983a92be33f262200a6360e3a478e3c778de99" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": [], "source": [ "> This is one of the 100 recipes of the [IPython Cookbook](http://ipython-books.github.io/), the definitive guide to high-performance scientific computing and data science in Python.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 6.4. Visualizing a NetworkX graph in the IPython notebook with d3.js" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Let's import the packages." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import json\n", "import numpy as np\n", "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. We load a famous social graph published in 1977, called **Zachary's Karate club graph**. This graph represents the friendships between members of a Karate Club. The club's president and the instructor were involved in a dispute, resulting in a split-up of this group. Here, we simply display the graph with matplotlib (using `networkx.draw()`)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "g = nx.karate_club_graph()\n", "plt.figure(figsize=(6,4));\n", "nx.draw(g)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\ndSXv5+NxHnXP+ZxzPnfcmfc9n+X9ySSIxYD8AFLRYpE2zZtLVFSUDBkyRIKDg+0OLIcPH5aRI0dK\nSEiI5M+fX7p27So///yzREdH23W+iEhei0Wu8P9jJrqR+SDMTSBeZBwnUt/PT1avXm33PXNr1apV\n0qBBA6fd779Og68TfT1mjARbLPKNi4vcyCR4XQX5wsVFgpwceEVErl+/Lj53eOo9CeKW/N/MyhT0\n8JAxY8bI3r17c73o9tKlS6Vw4cJy8eJFEREZMmSIDB48WE6ePCnu7u6ybNky2bhxo1SvXl1WrFjh\niB+DSnb58mVp3LixhIaGyoULFxx2XavVKps2bZLevXtLvnz5pGHDhjJz5kyJjIxMU+7cuXPi7+8v\nUVFRdl87JiZGpk+fLiGPPCIPWyzyhpubjAIZCdIvTx4JNJnkkeBgadKkSZqF5D/66CNxc3OTdevW\nZeu9nD59Wr755hsJDQ0VX19fad26tcyZM0du3LiR5XlPPvqo/Jr8+5LVIEwB6QXS1caXiECTSf75\n559s1Tc3lixZIi1atHDa/f7rNPg62ZYtW6RNs2bi7+kpvU0mmQwyB2QSSDezWfxNJuncunW2pn44\nypkzZyTYYsky+I7AGHWZVZkKvr4OaSo/ceKEFChQQDZv3iwiRvNzcHCwHDhwQI4dOyYPP/zw7bLv\nvfeevPPOO7m+p0orMTFR3n//fSlUqJBs2LDB4dePjo6W+fPnyzPPPCP+/v7StWtXWbt2rSQlJcno\n0aOle/fuOb729u3bZeTIkTL4tddkyODBMnr0aDl69KhcunRJ8ubNKydPnrxdNiIiQkwmkwQGBsq0\nadNydL/Lly/LtGnTpHnz5uLj4yNPP/20TJ48WcLDwzOU/e677+RZb285iTHy2gzinWqbmyrI+oOs\nTfc7Ngvnj3aeM2eOtGvXzqn3/C/T4HuPnD9/Xj4bOVJ6duggbZ95Rnp17ChffP653VN17oYbN27c\n8cm3NMj0OwTfYl5ecuLEiVzVJSYmRqpWrSpjx469ve/XX3+VatWqiYjIunXrpE6dOrePrVy5Ms1r\n5VgrVqyQoKAg+eKLL+7afOkLFy7ImDFjpFKlSlKkSBEJDAyU2bNn35V7DR06VHr16pVmn6+vr2zb\ntk1KlCghQ4cOTfNknF0REREyf/58adeunfj7+0utWrVkzJgxt38voqKiJF82uqHSbzV8fOTnn3/O\n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\n", "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "3. Now, we're going to display this graph in the notebook with d3.js. The first step is to bring this graph to Javascript. We choose here to export the graph in JSON. Note that d3.js generally expects each edge to be an object with a `source` and a `target`. Also, we specify which side each member has taken (`club` attribute)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from networkx.readwrite import json_graph\n", "data = json_graph.node_link_data(g)\n", "with open('graph.json', 'w') as f:\n", " json.dump(data, f, indent=4)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "4. The next step is to create an HTML object that will contain the visualization. Here, we create a `
` element in the notebook. We also specify a few CSS styles for nodes and links (also called edges)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%html\n", "
\n", "" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "5. The last step is trickier. We write the Javascript code to load the graph from the JSON file, and display it with d3.js. Knowing the basics of d3.js is required here (see the documentation of d3.js). We also give detailled explanations in the code comments below. (http://d3js.org)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%javascript\n", "// We load the d3.js library from the Web.\n", "require.config({paths: {d3: \"http://d3js.org/d3.v3.min\"}});\n", "require([\"d3\"], function(d3) {\n", " // The code in this block is executed when the \n", " // d3.js library has been loaded.\n", " \n", " // First, we specify the size of the canvas containing\n", " // the visualization (size of the
element).\n", " var width = 300,\n", " height = 300;\n", "\n", " // We create a color scale.\n", " var color = d3.scale.category10();\n", "\n", " // We create a force-directed dynamic graph layout.\n", " var force = d3.layout.force()\n", " .charge(-120)\n", " .linkDistance(30)\n", " .size([width, height]);\n", "\n", " // In the
element, we create a graphic\n", " // that will contain our interactive visualization.\n", " var svg = d3.select(\"#d3-example\").select(\"svg\")\n", " if (svg.empty()) {\n", " svg = d3.select(\"#d3-example\").append(\"svg\")\n", " .attr(\"width\", width)\n", " .attr(\"height\", height);\n", " }\n", " \n", " // We load the JSON file.\n", " d3.json(\"graph.json\", function(error, graph) {\n", " // In this block, the file has been loaded\n", " // and the 'graph' object contains our graph.\n", " \n", " // We load the nodes and links in the force-directed\n", " // graph.\n", " force.nodes(graph.nodes)\n", " .links(graph.links)\n", " .start();\n", "\n", " // We create a SVG element for each link\n", " // in the graph.\n", " var link = svg.selectAll(\".link\")\n", " .data(graph.links)\n", " .enter().append(\"line\")\n", " .attr(\"class\", \"link\");\n", "\n", " // We create a SVG element for each node\n", " // in the graph, and we specify a few attributes.\n", " var node = svg.selectAll(\".node\")\n", " .data(graph.nodes)\n", " .enter().append(\"circle\")\n", " .attr(\"class\", \"node\")\n", " .attr(\"r\", 5) // radius\n", " .style(\"fill\", function(d) {\n", " // The node color depends on the club.\n", " return color(d.club); \n", " })\n", " .call(force.drag);\n", "\n", " // The name of each node is the node number.\n", " node.append(\"title\")\n", " .text(function(d) { return d.id; });\n", "\n", " // We bind the positions of the SVG elements\n", " // to the positions of the dynamic force-directed graph,\n", " // at each time step.\n", " force.on(\"tick\", function() {\n", " link.attr(\"x1\", function(d) { return d.source.x; })\n", " .attr(\"y1\", function(d) { return d.source.y; })\n", " .attr(\"x2\", function(d) { return d.target.x; })\n", " .attr(\"y2\", function(d) { return d.target.y; });\n", "\n", " node.attr(\"cx\", function(d) { return d.x; })\n", " .attr(\"cy\", function(d) { return d.y; });\n", " });\n", " });\n", "});" ], "language": "python", "metadata": {}, "outputs": [ { "javascript": [ "// We load the d3.js library from the Web.\n", "require.config({paths: {d3: \"http://d3js.org/d3.v3.min\"}});\n", "require([\"d3\"], function(d3) {\n", " // The code in this block is executed when the \n", " // d3.js library has been loaded.\n", " \n", " // First, we specify the size of the canvas containing\n", " // the visualization (size of the
element).\n", " var width = 300,\n", " height = 300;\n", "\n", " // We create a color scale.\n", " var color = d3.scale.category10();\n", "\n", " // We create a force-directed dynamic graph layout.\n", " var force = d3.layout.force()\n", " .charge(-120)\n", " .linkDistance(30)\n", " .size([width, height]);\n", "\n", " // In the
element, we create a graphic\n", " // that will contain our interactive visualization.\n", " var svg = d3.select(\"#d3-example\").select(\"svg\")\n", " if (svg.empty()) {\n", " svg = d3.select(\"#d3-example\").append(\"svg\")\n", " .attr(\"width\", width)\n", " .attr(\"height\", height);\n", " }\n", " \n", " // We load the JSON file.\n", " d3.json(\"graph.json\", function(error, graph) {\n", " // In this block, the file has been loaded\n", " // and the 'graph' object contains our graph.\n", " \n", " // We load the nodes and links in the force-directed\n", " // graph.\n", " force.nodes(graph.nodes)\n", " .links(graph.links)\n", " .start();\n", "\n", " // We create a SVG element for each link\n", " // in the graph.\n", " var link = svg.selectAll(\".link\")\n", " .data(graph.links)\n", " .enter().append(\"line\")\n", " .attr(\"class\", \"link\");\n", "\n", " // We create a SVG element for each node\n", " // in the graph, and we specify a few attributes.\n", " var node = svg.selectAll(\".node\")\n", " .data(graph.nodes)\n", " .enter().append(\"circle\")\n", " .attr(\"class\", \"node\")\n", " .attr(\"r\", 5) // radius\n", " .style(\"fill\", function(d) {\n", " // The node color depends on the club.\n", " return color(d.club); \n", " })\n", " .call(force.drag);\n", "\n", " // The name of each node is the node number.\n", " node.append(\"title\")\n", " .text(function(d) { return d.id; });\n", "\n", " // We bind the positions of the SVG elements\n", " // to the positions of the dynamic force-directed graph,\n", " // at each time step.\n", " force.on(\"tick\", function() {\n", " link.attr(\"x1\", function(d) { return d.source.x; })\n", " .attr(\"y1\", function(d) { return d.source.y; })\n", " .attr(\"x2\", function(d) { return d.target.x; })\n", " .attr(\"y2\", function(d) { return d.target.y; });\n", "\n", " node.attr(\"cx\", function(d) { return d.x; })\n", " .attr(\"cy\", function(d) { return d.y; });\n", " });\n", " });\n", "});" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "When we execute this cell, the HTML object created in the previous cell is updated. The graph is animated and interactive: we can click on nodes, see their labels, and move them within the canvas." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> You'll find all the explanations, figures, references, and much more in the book (to be released later this summer).\n", "\n", "> [IPython Cookbook](http://ipython-books.github.io/), by [Cyrille Rossant](http://cyrille.rossant.net), Packt Publishing, 2014 (500 pages)." ] } ], "metadata": {} } ] }