Created
August 14, 2012 02:36
-
-
Save cschin/3345861 to your computer and use it in GitHub Desktop.
Demo for showing De Bruijn graph with ipython notebook + d3.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "De_Bruijn_VIS" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Some background about De Bruijn Graph\n", | |
"http://en.wikipedia.org/wiki/De_Bruijn_graph" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Set-up ``networkx`` for visualizing the local structure of such network." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import networkx as nx\n", | |
"from IPython.core.display import display_javascript\n", | |
"#from IPython.frontend.html.notebook import visutils as vis\n", | |
"import json\n", | |
"import time" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Load D3.js" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"%install_ext https://raw.github.com/cschin/ipython_d3_mashup/master/extension/visutils.py\n", | |
"%reload_ext visutils\n", | |
"vis.run_js(\"$.getScript('http://d3js.org/d3.v2.js')\")\n", | |
"vis.run_js(\"$.getScript('https://raw.github.com/cschin/ipython_d3_mashup/master/extension/vis_extension.js')\")\n", | |
"time.sleep(2)\n", | |
"vis.run_js(\"IPython.vis_init();\")" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"Installed visutils.py. To use it, type:\n", | |
" %load_ext visutils\n" | |
] | |
}, | |
{ | |
"javascript": [ | |
"$.getScript('http://d3js.org/d3.v2.js')" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"$.getScript('https://raw.github.com/cschin/ipython_d3_mashup/master/extension/vis_extension.js')" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"IPython.vis_init();" | |
], | |
"output_type": "display_data" | |
} | |
], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Set up the visulization \"cell\"/widget." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"try:\n", | |
" vis_display.remove()\n", | |
"except:\n", | |
" pass\n", | |
"plot_area_style = {\"position\":\"absolute\",\n", | |
" \"top\":\"0px\",\n", | |
" \"width\":\"850px\",\n", | |
" \"left\":\"750px\",\n", | |
" \"height\":\"350px\",\n", | |
" \"border\":\"9px groove\",\n", | |
" \"background-color\":\"rgba(200,200,200,0.5)\"}\n", | |
"\n", | |
"vis_cell = vis.VISCellWidget(name=\"plot_area\", style = plot_area_style)\n", | |
"\n", | |
"## attache the container to a \"visual display\"\n", | |
"vis_display = vis.NotebookVisualDisplay(container = vis_cell)\n", | |
"\n", | |
"\n", | |
"## create the SVG element for D3\n", | |
"svg_style = {\"width\":\"850px\", \n", | |
" \"height\":\"300px\",\n", | |
" \"border\":\"2px solid\"}\n", | |
"\n", | |
"svg = vis.SVGWidget(name = \"svg_display\", \n", | |
" parent = \"plot_area\", \n", | |
" style = svg_style,\n", | |
" vis = vis_display)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"javascript": [ | |
"$('#plot_area').remove()" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"IPython.vis_utils.insert_vis_cell(\"plot_area\"); \n", | |
" $(\"#plot_area\").css(\"top\", \"0px\");\n", | |
" $(\"#plot_area\").css(\"height\", \"350px\");\n", | |
" $(\"#plot_area\").css(\"width\", \"850px\");\n", | |
" $(\"#plot_area\").css(\"position\", \"absolute\");\n", | |
" $(\"#plot_area\").css(\"border\", \"9px groove\");\n", | |
" $(\"#plot_area\").css(\"background-color\", \"rgba(200,200,200,0.5)\");\n", | |
" $(\"#plot_area\").css(\"left\", \"750px\");" | |
], | |
"output_type": "display_data" | |
} | |
], | |
"prompt_number": 20 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def replace_nodes(G0, Ns, N0):\n", | |
" G0.add_node(N0, X=\"X\")\n", | |
"\n", | |
" head = Ns[0]\n", | |
" tail = Ns[-1]\n", | |
" \n", | |
" p = G0.predecessors(Ns[0])\n", | |
" if len(p) == 1:\n", | |
" p = p[0]\n", | |
" G0.add_edge(p, N0)\n", | |
" \n", | |
" n = G0.successors(Ns[-1])\n", | |
" if len(n) == 1:\n", | |
" n = n[0]\n", | |
" G0.add_edge(N0, n)\n", | |
" \n", | |
" G0.remove_nodes_from(Ns)\n", | |
"\n", | |
"def reduce_graph(G0):\n", | |
" G1 = G0.copy()\n", | |
" G2 = G0.copy()\n", | |
" nodes_to_remove = []\n", | |
" for n in G1.nodes():\n", | |
" if len(G1.successors(n)) > 1 or len(G1.predecessors(n)) > 1:\n", | |
" if n[0] != \"^\" and n[-1] != \"$\":\n", | |
" nodes_to_remove.append(n)\n", | |
" G1.remove_nodes_from(nodes_to_remove)\n", | |
"\n", | |
" for ns in nx.weakly_connected_components(G1):\n", | |
" ns = [n for n in ns if n[0] != \"^\" and n[-1] != \"$\"]\n", | |
" if len(ns) == 0: continue\n", | |
" contig = []\n", | |
" n_sorted = nx.topological_sort(G1, ns)\n", | |
" n_sorted = [n for n in n_sorted if n[0] != \"^\" and n[-1] != \"$\"]\n", | |
" if len(n_sorted) <= 1: continue\n", | |
"\n", | |
" for kmer in n_sorted:\n", | |
" assert len(G1.successors(kmer)) <= 1\n", | |
" if len(contig) == 0:\n", | |
" contig.append(kmer)\n", | |
" else:\n", | |
" contig.append(kmer[-1])\n", | |
" replace_nodes(G2, n_sorted, \"\".join(contig))\n", | |
" \n", | |
" return G2" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 21 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Generate the json for d3.js for the force layout." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def get_group(w, w1):\n", | |
" c = 0\n", | |
" for c1, c2 in zip(w,w1):\n", | |
" if c1 == c2:\n", | |
" c += 1\n", | |
" continue\n", | |
" break\n", | |
" return c\n", | |
"\n", | |
"def set_g_json(seq, k, reduce_g = False):\n", | |
" G=nx.DiGraph()\n", | |
" seq = \"^\"+seq+\"$\"\n", | |
" for i in range(len(seq)-k+1):\n", | |
" w1 = seq[i:i+k-1]\n", | |
" w2 = seq[i+1:i+k]\n", | |
" G.add_edge(w1, w2)\n", | |
" if reduce_g == True:\n", | |
" G = reduce_graph(G)\n", | |
" def generateD3JSONForG(G):\n", | |
" s = {\"nodes\":[], \"links\":[]}\n", | |
" name2Idx = {}\n", | |
" c = 0\n", | |
" for n in G.nodes():\n", | |
" #print n\n", | |
" g = len(G.neighbors(n))\n", | |
" if \"^\" in n:\n", | |
" s[\"nodes\"].append({\"name\":n, \"group\":g, \"fixed\":True, \"x\":0,\"y\":150})\n", | |
" elif \"$\" in n:\n", | |
" s[\"nodes\"].append({\"name\":n, \"group\":g, \"fixed\":True, \"x\":850,\"y\":150})\n", | |
" else:\n", | |
" s[\"nodes\"].append({\"name\":n, \"group\":g})\n", | |
" name2Idx[n] = c\n", | |
" c += 1\n", | |
" for e in G.edges():\n", | |
" col = \"rgb(0,0,255)\"\n", | |
" width = 1\n", | |
" s[\"links\"].append({\"source\":name2Idx[e[0]], \"target\":name2Idx[e[1]], \"color\":col, \"width\":width})\n", | |
" return json.dumps(s) \n", | |
" n_json = generateD3JSONForG(G)\n", | |
" vis_cell.set_js_var(\"n_json\", n_json)\n", | |
" " | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 22 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Set up d3.js code for showing up the network around the word ``START``." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"vis_display.js_code=[]\n", | |
"\n", | |
"set_g_json(\"ACGTACGTTGTGCAGTAGTAGTAGT\",5)\n", | |
"\n", | |
"js = \"\"\"\n", | |
"\n", | |
"(function() {\n", | |
"\n", | |
"var plot_neighbor=function(json) {\n", | |
" var w = 850,\n", | |
" h = 300,\n", | |
" fill = d3.scale.category10();\n", | |
" var vis = d3.select(\"#plot_area #svg_display\")\n", | |
" var force = d3.layout.force()\n", | |
" .charge(-40)\n", | |
" .linkDistance(2)\n", | |
" .nodes(json.nodes)\n", | |
" .links(json.links)\n", | |
" .size([w, h])\n", | |
" .linkStrength(0.1)\n", | |
" .start();\n", | |
"\n", | |
" var link = vis.selectAll(\"line.link\")\n", | |
" .data(json.links)\n", | |
" .enter().append(\"svg:line\")\n", | |
" .attr(\"class\", \"link\")\n", | |
" .style(\"stroke-width\", function(d) { return d.width; })\n", | |
" .style(\"stroke\", function(d) { return d.color; })\n", | |
" .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", | |
" var node = vis.selectAll(\"circle.node\")\n", | |
" .data(json.nodes)\n", | |
" .enter().append(\"svg:circle\")\n", | |
" .attr(\"class\", \"node\")\n", | |
" .attr(\"cx\", function(d) { return d.x; })\n", | |
" .attr(\"cy\", function(d) { return d.y; })\n", | |
" .attr(\"r\", 4)\n", | |
" .style(\"fill\", function(d) { return fill(d.group); })\n", | |
" .call(force.drag);\n", | |
"\n", | |
" node.append(\"svg:title\")\n", | |
" .text(function(d) { return d.name; });\n", | |
"\n", | |
" vis.style(\"opacity\", 1e-6)\n", | |
" .transition()\n", | |
" .duration(1000)\n", | |
" .style(\"opacity\", 1);\n", | |
"\n", | |
"\n", | |
"// Per-type markers, as they don't inherit styles.\n", | |
"vis.append(\"svg:defs\").selectAll(\"marker\")\n", | |
" .data([\"arrow\"])\n", | |
" .enter().append(\"svg:marker\")\n", | |
" .attr(\"id\", String)\n", | |
" .attr(\"viewBox\", \"0 -5 10 10\")\n", | |
" .attr(\"refX\", 15)\n", | |
" .attr(\"refY\", -1.5)\n", | |
" .attr(\"markerWidth\", 6)\n", | |
" .attr(\"markerHeight\", 6)\n", | |
" .attr(\"orient\", \"auto\")\n", | |
" .append(\"svg:path\")\n", | |
" .attr(\"d\", \"M0,-5L10,0L0,5\");\n", | |
" \n", | |
"\n", | |
"var path = vis.append(\"svg:g\").selectAll(\"path\")\n", | |
" .data(force.links())\n", | |
" .enter().append(\"svg:path\")\n", | |
" .attr(\"class\", function(d) { return \"link arrow\"; })\n", | |
" .attr(\"marker-end\", function(d) { return \"url(#arrow)\"; })\n", | |
" .style(\"stroke-width\", \"1.5px\");\n", | |
"\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", | |
" path.attr(\"d\", function(d) {\n", | |
" var dx = d.target.x - d.source.x,\n", | |
" dy = d.target.y - d.source.y,\n", | |
" dr = Math.sqrt(dx * dx + dy * dy);\n", | |
" return \"M\" + d.source.x + \",\" + d.source.y + \"L\" + d.target.x + \",\" + d.target.y;\n", | |
" })\n", | |
"\n", | |
" });};\n", | |
"var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"];\n", | |
"//alert(vc.data);\n", | |
"var n_json=$.parseJSON(vc.data.n_json);\n", | |
"//var n_json = vc.data.n_json;\n", | |
"//alert(vc.data[\"n_json\"]);\n", | |
"plot_neighbor(n_json)})()\n", | |
"\"\"\"\n", | |
"vis_display.attach_js_code(js)\n", | |
"vis_display.refresh()\n" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"javascript": [ | |
"(function(){var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"];vc.data.n_json=\"{\\\"nodes\\\": [{\\\"group\\\": 2, \\\"name\\\": \\\"TAGT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTAC\\\"}, {\\\"group\\\": 2, \\\"name\\\": \\\"ACGT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTTG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTAG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"CGTT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTGC\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TGTG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TTGT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"CAGT\\\"}, {\\\"y\\\": 150, \\\"x\\\": 850, \\\"fixed\\\": true, \\\"group\\\": 0, \\\"name\\\": \\\"AGT$\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TGCA\\\"}, {\\\"y\\\": 150, \\\"x\\\": 0, \\\"fixed\\\": true, \\\"group\\\": 1, \\\"name\\\": \\\"^ACG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TACG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"AGTA\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GCAG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"CGTA\\\"}], \\\"links\\\": [{\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 0, \\\"target\\\": 10, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 0, \\\"target\\\": 14, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 1, \\\"target\\\": 13, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 2, \\\"target\\\": 5, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 2, \\\"target\\\": 16, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 3, \\\"target\\\": 8, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 4, \\\"target\\\": 0, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 5, \\\"target\\\": 3, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 6, \\\"target\\\": 11, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 7, \\\"target\\\": 6, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 8, \\\"target\\\": 7, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 9, \\\"target\\\": 14, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 11, \\\"target\\\": 15, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 12, \\\"target\\\": 2, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 13, \\\"target\\\": 2, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 14, \\\"target\\\": 4, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 15, \\\"target\\\": 9, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 16, \\\"target\\\": 1, \\\"width\\\": 1}]}\";})()" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"$('#plot_area').remove()" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"IPython.vis_utils.insert_vis_cell(\"plot_area\"); \n", | |
" $(\"#plot_area\").css(\"top\", \"0px\");\n", | |
" $(\"#plot_area\").css(\"height\", \"350px\");\n", | |
" $(\"#plot_area\").css(\"width\", \"850px\");\n", | |
" $(\"#plot_area\").css(\"position\", \"absolute\");\n", | |
" $(\"#plot_area\").css(\"border\", \"9px groove\");\n", | |
" $(\"#plot_area\").css(\"background-color\", \"rgba(200,200,200,0.5)\");\n", | |
" $(\"#plot_area\").css(\"left\", \"750px\");" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"(function(){var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"];vc.data.n_json=\"{\\\"nodes\\\": [{\\\"group\\\": 2, \\\"name\\\": \\\"TAGT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTAC\\\"}, {\\\"group\\\": 2, \\\"name\\\": \\\"ACGT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTTG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTAG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"CGTT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTGC\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TGTG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TTGT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"CAGT\\\"}, {\\\"y\\\": 150, \\\"x\\\": 850, \\\"fixed\\\": true, \\\"group\\\": 0, \\\"name\\\": \\\"AGT$\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TGCA\\\"}, {\\\"y\\\": 150, \\\"x\\\": 0, \\\"fixed\\\": true, \\\"group\\\": 1, \\\"name\\\": \\\"^ACG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TACG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"AGTA\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GCAG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"CGTA\\\"}], \\\"links\\\": [{\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 0, \\\"target\\\": 10, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 0, \\\"target\\\": 14, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 1, \\\"target\\\": 13, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 2, \\\"target\\\": 5, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 2, \\\"target\\\": 16, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 3, \\\"target\\\": 8, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 4, \\\"target\\\": 0, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 5, \\\"target\\\": 3, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 6, \\\"target\\\": 11, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 7, \\\"target\\\": 6, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 8, \\\"target\\\": 7, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 9, \\\"target\\\": 14, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 11, \\\"target\\\": 15, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 12, \\\"target\\\": 2, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 13, \\\"target\\\": 2, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 14, \\\"target\\\": 4, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 15, \\\"target\\\": 9, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 16, \\\"target\\\": 1, \\\"width\\\": 1}]}\";})()" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"\n", | |
"\n", | |
"$(\"#plot_area\").append(\"<svg id='svg_display'></svg>\"); \n", | |
" $(\"#svg_display\").css(\"width\", \"850px\");\n", | |
" $(\"#svg_display\").css(\"border\", \"2px solid\");\n", | |
" $(\"#svg_display\").css(\"height\", \"300px\");\n", | |
"\n", | |
"\n", | |
"\n", | |
"(function() {\n", | |
"\n", | |
"var plot_neighbor=function(json) {\n", | |
" var w = 850,\n", | |
" h = 300,\n", | |
" fill = d3.scale.category10();\n", | |
" var vis = d3.select(\"#plot_area #svg_display\")\n", | |
" var force = d3.layout.force()\n", | |
" .charge(-40)\n", | |
" .linkDistance(2)\n", | |
" .nodes(json.nodes)\n", | |
" .links(json.links)\n", | |
" .size([w, h])\n", | |
" .linkStrength(0.1)\n", | |
" .start();\n", | |
"\n", | |
" var link = vis.selectAll(\"line.link\")\n", | |
" .data(json.links)\n", | |
" .enter().append(\"svg:line\")\n", | |
" .attr(\"class\", \"link\")\n", | |
" .style(\"stroke-width\", function(d) { return d.width; })\n", | |
" .style(\"stroke\", function(d) { return d.color; })\n", | |
" .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", | |
" var node = vis.selectAll(\"circle.node\")\n", | |
" .data(json.nodes)\n", | |
" .enter().append(\"svg:circle\")\n", | |
" .attr(\"class\", \"node\")\n", | |
" .attr(\"cx\", function(d) { return d.x; })\n", | |
" .attr(\"cy\", function(d) { return d.y; })\n", | |
" .attr(\"r\", 4)\n", | |
" .style(\"fill\", function(d) { return fill(d.group); })\n", | |
" .call(force.drag);\n", | |
"\n", | |
" node.append(\"svg:title\")\n", | |
" .text(function(d) { return d.name; });\n", | |
"\n", | |
" vis.style(\"opacity\", 1e-6)\n", | |
" .transition()\n", | |
" .duration(1000)\n", | |
" .style(\"opacity\", 1);\n", | |
"\n", | |
"\n", | |
"// Per-type markers, as they don't inherit styles.\n", | |
"vis.append(\"svg:defs\").selectAll(\"marker\")\n", | |
" .data([\"arrow\"])\n", | |
" .enter().append(\"svg:marker\")\n", | |
" .attr(\"id\", String)\n", | |
" .attr(\"viewBox\", \"0 -5 10 10\")\n", | |
" .attr(\"refX\", 15)\n", | |
" .attr(\"refY\", -1.5)\n", | |
" .attr(\"markerWidth\", 6)\n", | |
" .attr(\"markerHeight\", 6)\n", | |
" .attr(\"orient\", \"auto\")\n", | |
" .append(\"svg:path\")\n", | |
" .attr(\"d\", \"M0,-5L10,0L0,5\");\n", | |
" \n", | |
"\n", | |
"var path = vis.append(\"svg:g\").selectAll(\"path\")\n", | |
" .data(force.links())\n", | |
" .enter().append(\"svg:path\")\n", | |
" .attr(\"class\", function(d) { return \"link arrow\"; })\n", | |
" .attr(\"marker-end\", function(d) { return \"url(#arrow)\"; })\n", | |
" .style(\"stroke-width\", \"1.5px\");\n", | |
"\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", | |
" path.attr(\"d\", function(d) {\n", | |
" var dx = d.target.x - d.source.x,\n", | |
" dy = d.target.y - d.source.y,\n", | |
" dr = Math.sqrt(dx * dx + dy * dy);\n", | |
" return \"M\" + d.source.x + \",\" + d.source.y + \"L\" + d.target.x + \",\" + d.target.y;\n", | |
" })\n", | |
"\n", | |
" });};\n", | |
"var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"];\n", | |
"//alert(vc.data);\n", | |
"var n_json=$.parseJSON(vc.data.n_json);\n", | |
"//var n_json = vc.data.n_json;\n", | |
"//alert(vc.data[\"n_json\"]);\n", | |
"plot_neighbor(n_json)})()\n" | |
], | |
"output_type": "display_data" | |
} | |
], | |
"prompt_number": 23 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"vis_display.hide()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"javascript": [ | |
"$(\"#plot_area\").css(\"visibility\",\"hidden\")" | |
], | |
"output_type": "display_data" | |
} | |
], | |
"prompt_number": 24 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"vis_display.show()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"javascript": [ | |
"$(\"#plot_area\").css(\"visibility\",\"visible\")" | |
], | |
"output_type": "display_data" | |
} | |
], | |
"prompt_number": 25 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"def show_neighbors(w, k, reduce_g = False):\n", | |
" vis.run_js('$(\"#svg_display *\").remove();')\n", | |
" set_g_json(w, k, reduce_g = reduce_g)\n", | |
" for jc in vis_display.js_code:\n", | |
" vis.run_js(jc)\n", | |
" \n", | |
" \n", | |
"## create a test input text box\n", | |
"input_style = {\"width\":\"440px\"}\n", | |
"tb = vis.InputWidget(name = \"input_1\",\n", | |
" parent = \"plot_area\",\n", | |
" style = input_style,\n", | |
" value = \"AATTAATTAAGGTTTTAATTATTAATTGTAATTAATTAATTAATACTGAT\",\n", | |
" vis = vis_display)\n", | |
"\n", | |
"def onchange(self, *argv, **kwargv):\n", | |
" self.update_value()\n", | |
" \n", | |
"vis.set_action(tb, \"onchange\", onchange)\n", | |
"\n", | |
"\n", | |
"## create a input text box for k\n", | |
"input_style = {\"width\":\"40px\"}\n", | |
"kb = vis.InputWidget(name = \"input_2\",\n", | |
" parent = \"plot_area\",\n", | |
" style = input_style,\n", | |
" value = \"5\",\n", | |
" vis = vis_display)\n", | |
" \n", | |
"vis.set_action(kb, \"onchange\", onchange)\n", | |
"\n", | |
"button_style = {\"width\":\"120px\"}\n", | |
"b = vis.ButtonWidget(name=\"button\", \n", | |
" parent=\"plot_area\", \n", | |
" style=button_style, \n", | |
" text=\"show graph\",\n", | |
" vis = vis_display)\n", | |
"b.argv = [tb, kb]\n", | |
"def onclick(self, *argv, **kwargv):\n", | |
" self.text = argv[0].value\n", | |
" self.k = int(argv[1].value)\n", | |
" show_neighbors(self.text, self.k, reduce_g = False)\n", | |
"vis.set_action(b, \"onclick\", onclick, \"argv\")\n", | |
" \n", | |
" \n", | |
"button_style = {\"width\":\"120px\"}\n", | |
"b_r = vis.ButtonWidget(name=\"button2\", \n", | |
" parent=\"plot_area\", \n", | |
" style=button_style, \n", | |
" text=\"reduce graph\",\n", | |
" vis = vis_display)\n", | |
"b_r.argv = [tb, kb]\n", | |
"def onclick(self, *argv, **kwargv):\n", | |
" self.text = argv[0].value\n", | |
" self.k = int(argv[1].value)\n", | |
" show_neighbors(self.text, self.k, reduce_g = True)\n", | |
"vis.set_action(b_r, \"onclick\", onclick, \"argv\") \n", | |
" \n", | |
"\n", | |
"button_style = {\"width\":\"120px\"}\n", | |
"b2 = vis.ButtonWidget(name=\"button3\", \n", | |
" parent=\"plot_area\", \n", | |
" style=button_style, \n", | |
" text=\"close\",\n", | |
" vis = vis_display)\n", | |
"def onclick(self, *argv, **kwargv):\n", | |
" vis_display.remove()\n", | |
" \n", | |
"vis.set_action(b2, \"onclick\", onclick)\n", | |
"\n", | |
"vis_display.refresh()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"javascript": [ | |
"$('#plot_area').remove()" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"IPython.vis_utils.insert_vis_cell(\"plot_area\"); \n", | |
" $(\"#plot_area\").css(\"top\", \"0px\");\n", | |
" $(\"#plot_area\").css(\"height\", \"350px\");\n", | |
" $(\"#plot_area\").css(\"width\", \"850px\");\n", | |
" $(\"#plot_area\").css(\"position\", \"absolute\");\n", | |
" $(\"#plot_area\").css(\"border\", \"9px groove\");\n", | |
" $(\"#plot_area\").css(\"background-color\", \"rgba(200,200,200,0.5)\");\n", | |
" $(\"#plot_area\").css(\"left\", \"750px\");" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"(function(){var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"];vc.data.n_json=\"{\\\"nodes\\\": [{\\\"group\\\": 1, \\\"name\\\": \\\"AAGG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTAA\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GTTT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TTGT\\\"}, {\\\"group\\\": 2, \\\"name\\\": \\\"TTAA\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"ATTG\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"AGGT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"GGTT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TTAT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TGAT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TTTA\\\"}, {\\\"group\\\": 2, \\\"name\\\": \\\"ATTA\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"ATAC\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TACT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TTTT\\\"}, {\\\"y\\\": 150, \\\"x\\\": 850, \\\"fixed\\\": true, \\\"group\\\": 0, \\\"name\\\": \\\"GAT$\\\"}, {\\\"y\\\": 150, \\\"x\\\": 0, \\\"fixed\\\": true, \\\"group\\\": 1, \\\"name\\\": \\\"^AAT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TAAG\\\"}, {\\\"group\\\": 2, \\\"name\\\": \\\"AATT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TGTA\\\"}, {\\\"group\\\": 2, \\\"name\\\": \\\"TAAT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"AATA\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"CTGA\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"TATT\\\"}, {\\\"group\\\": 1, \\\"name\\\": \\\"ACTG\\\"}], \\\"links\\\": [{\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 0, \\\"target\\\": 6, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 1, \\\"target\\\": 20, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 2, \\\"target\\\": 14, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 3, \\\"target\\\": 19, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 4, \\\"target\\\": 17, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 4, \\\"target\\\": 20, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 5, \\\"target\\\": 3, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 6, \\\"target\\\": 7, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 7, \\\"target\\\": 2, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 8, \\\"target\\\": 23, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 9, \\\"target\\\": 15, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 10, \\\"target\\\": 4, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 11, \\\"target\\\": 8, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 11, \\\"target\\\": 4, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 12, \\\"target\\\": 13, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 13, \\\"target\\\": 24, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 14, \\\"target\\\": 10, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 16, \\\"target\\\": 18, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 17, \\\"target\\\": 0, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 18, \\\"target\\\": 5, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 18, \\\"target\\\": 11, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 19, \\\"target\\\": 1, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 20, \\\"target\\\": 21, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 20, \\\"target\\\": 18, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 21, \\\"target\\\": 12, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 22, \\\"target\\\": 9, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 23, \\\"target\\\": 11, \\\"width\\\": 1}, {\\\"color\\\": \\\"rgb(0,0,255)\\\", \\\"source\\\": 24, \\\"target\\\": 22, \\\"width\\\": 1}]}\";})()" | |
], | |
"output_type": "display_data" | |
}, | |
{ | |
"javascript": [ | |
"\n", | |
"\n", | |
"$(\"#plot_area\").append(\"<svg id='svg_display'></svg>\"); \n", | |
" $(\"#svg_display\").css(\"width\", \"850px\");\n", | |
" $(\"#svg_display\").css(\"border\", \"2px solid\");\n", | |
" $(\"#svg_display\").css(\"height\", \"300px\");\n", | |
"\n", | |
"$(\"#plot_area\").append(\"<input id='input_1' value='AATTAATTAAGGTTTTAATTATTAATTGTAATTAATTAATTAATACTGAT'></input>\"); \n", | |
" $(\"#input_1\").css(\"width\", \"440px\");( function () {$(\"#input_1\")[0].onchange= function() {var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"]; var vis_code = \"try:\\n _w = _vis.get_widget_by_name('input_1')\\nexcept NameError:\\n import visutils as _vis\\n _w = _vis.get_widget_by_name('input_1')\\n_w.onchange()\";vc.execute_py(vis_code);} } )();\n", | |
"\n", | |
"$(\"#plot_area\").append(\"<input id='input_2' value='5'></input>\"); \n", | |
" $(\"#input_2\").css(\"width\", \"40px\");( function () {$(\"#input_2\")[0].onchange= function() {var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"]; var vis_code = \"try:\\n _w = _vis.get_widget_by_name('input_2')\\nexcept NameError:\\n import visutils as _vis\\n _w = _vis.get_widget_by_name('input_2')\\n_w.onchange()\";vc.execute_py(vis_code);} } )();\n", | |
"\n", | |
"$(\"#plot_area\").append(\"<button id='button'>show graph</button>\"); \n", | |
" $(\"#button\").css(\"width\", \"120px\");( function () {$(\"#button\")[0].onclick= function() {var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"]; var vis_code = \"try:\\n _w = _vis.get_widget_by_name('button')\\nexcept NameError:\\n import visutils as _vis\\n _w = _vis.get_widget_by_name('button')\\n_w.onclick(*_w.argv)\";vc.execute_py(vis_code);} } )();\n", | |
"\n", | |
"$(\"#plot_area\").append(\"<button id='button2'>reduce graph</button>\"); \n", | |
" $(\"#button2\").css(\"width\", \"120px\");( function () {$(\"#button2\")[0].onclick= function() {var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"]; var vis_code = \"try:\\n _w = _vis.get_widget_by_name('button2')\\nexcept NameError:\\n import visutils as _vis\\n _w = _vis.get_widget_by_name('button2')\\n_w.onclick(*_w.argv)\";vc.execute_py(vis_code);} } )();\n", | |
"\n", | |
"$(\"#plot_area\").append(\"<button id='button3'>close</button>\"); \n", | |
" $(\"#button3\").css(\"width\", \"120px\");( function () {$(\"#button3\")[0].onclick= function() {var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"]; var vis_code = \"try:\\n _w = _vis.get_widget_by_name('button3')\\nexcept NameError:\\n import visutils as _vis\\n _w = _vis.get_widget_by_name('button3')\\n_w.onclick()\";vc.execute_py(vis_code);} } )();\n", | |
"\n", | |
"\n", | |
"\n", | |
"(function() {\n", | |
"\n", | |
"var plot_neighbor=function(json) {\n", | |
" var w = 850,\n", | |
" h = 300,\n", | |
" fill = d3.scale.category10();\n", | |
" var vis = d3.select(\"#plot_area #svg_display\")\n", | |
" var force = d3.layout.force()\n", | |
" .charge(-40)\n", | |
" .linkDistance(2)\n", | |
" .nodes(json.nodes)\n", | |
" .links(json.links)\n", | |
" .size([w, h])\n", | |
" .linkStrength(0.1)\n", | |
" .start();\n", | |
"\n", | |
" var link = vis.selectAll(\"line.link\")\n", | |
" .data(json.links)\n", | |
" .enter().append(\"svg:line\")\n", | |
" .attr(\"class\", \"link\")\n", | |
" .style(\"stroke-width\", function(d) { return d.width; })\n", | |
" .style(\"stroke\", function(d) { return d.color; })\n", | |
" .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", | |
" var node = vis.selectAll(\"circle.node\")\n", | |
" .data(json.nodes)\n", | |
" .enter().append(\"svg:circle\")\n", | |
" .attr(\"class\", \"node\")\n", | |
" .attr(\"cx\", function(d) { return d.x; })\n", | |
" .attr(\"cy\", function(d) { return d.y; })\n", | |
" .attr(\"r\", 4)\n", | |
" .style(\"fill\", function(d) { return fill(d.group); })\n", | |
" .call(force.drag);\n", | |
"\n", | |
" node.append(\"svg:title\")\n", | |
" .text(function(d) { return d.name; });\n", | |
"\n", | |
" vis.style(\"opacity\", 1e-6)\n", | |
" .transition()\n", | |
" .duration(1000)\n", | |
" .style(\"opacity\", 1);\n", | |
"\n", | |
"\n", | |
"// Per-type markers, as they don't inherit styles.\n", | |
"vis.append(\"svg:defs\").selectAll(\"marker\")\n", | |
" .data([\"arrow\"])\n", | |
" .enter().append(\"svg:marker\")\n", | |
" .attr(\"id\", String)\n", | |
" .attr(\"viewBox\", \"0 -5 10 10\")\n", | |
" .attr(\"refX\", 15)\n", | |
" .attr(\"refY\", -1.5)\n", | |
" .attr(\"markerWidth\", 6)\n", | |
" .attr(\"markerHeight\", 6)\n", | |
" .attr(\"orient\", \"auto\")\n", | |
" .append(\"svg:path\")\n", | |
" .attr(\"d\", \"M0,-5L10,0L0,5\");\n", | |
" \n", | |
"\n", | |
"var path = vis.append(\"svg:g\").selectAll(\"path\")\n", | |
" .data(force.links())\n", | |
" .enter().append(\"svg:path\")\n", | |
" .attr(\"class\", function(d) { return \"link arrow\"; })\n", | |
" .attr(\"marker-end\", function(d) { return \"url(#arrow)\"; })\n", | |
" .style(\"stroke-width\", \"1.5px\");\n", | |
"\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", | |
" path.attr(\"d\", function(d) {\n", | |
" var dx = d.target.x - d.source.x,\n", | |
" dy = d.target.y - d.source.y,\n", | |
" dr = Math.sqrt(dx * dx + dy * dy);\n", | |
" return \"M\" + d.source.x + \",\" + d.source.y + \"L\" + d.target.x + \",\" + d.target.y;\n", | |
" })\n", | |
"\n", | |
" });};\n", | |
"var vc = IPython.vis_utils.name_to_viscell[\"plot_area\"];\n", | |
"//alert(vc.data);\n", | |
"var n_json=$.parseJSON(vc.data.n_json);\n", | |
"//var n_json = vc.data.n_json;\n", | |
"//alert(vc.data[\"n_json\"]);\n", | |
"plot_neighbor(n_json)})()\n" | |
], | |
"output_type": "display_data" | |
} | |
], | |
"prompt_number": 36 | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment