Skip to content

Instantly share code, notes, and snippets.

@ngoldbaum
Last active January 2, 2016 21:49
Show Gist options
  • Save ngoldbaum/8366128 to your computer and use it in GitHub Desktop.
Save ngoldbaum/8366128 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"D3 Viewer for Matplotlib"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook shows a few examples of d3 views of matplotlib plots.\n",
"The resulting plots can be panned and zoomed using the mouse.\n",
"\n",
"See more at http://github.com/jakevdp/mpld3\n",
"\n",
"Note that not every feature of matplotlib is yet implemented. Here are a few examples:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from mpld3 import enable_notebook\n",
"enable_notebook(d3_url=\"files/d3.js\")"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Scatter points\n",
"fig, ax = plt.subplots()\n",
"np.random.seed(0)\n",
"x, y = np.random.normal(0, 1, (2, 200))\n",
"color = np.random.random(200)\n",
"size = 500 * np.random.random(200)\n",
"\n",
"ax.scatter(x, y, c=color, s=size, alpha=0.3)\n",
"\n",
"ax.set_xlabel('x axis')\n",
"ax.set_ylabel('y axis')\n",
"ax.set_title('Matplotlib Plot Rendered in D3!', size=14)\n",
"\n",
"ax.grid(color='lightgray', alpha=0.7)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": [
"/Users/goldbaum/Documents/mpld3/mpld3/_objects.py:1103: UserWarning: Collection: multiple transforms not implemented. They will be ignored.\n",
" warnings.warn(\"Collection: multiple transforms not implemented. \"\n"
]
},
{
"html": [
"\n",
"\n",
"\n",
" <script type=\"text/javascript\" src=\"http://d3js.org/d3.v3.min.js\"></script>\n",
"\n",
" <script type=\"text/javascript\">\n",
"\n",
"\n",
" function Figure(figid, width, height){\n",
" this.figid = figid;\n",
" this.root = d3.select(figid);\n",
" this.width = width;\n",
" this.height = height;\n",
" this.axes = [];\n",
" }\n",
"\n",
" Figure.prototype.draw = function(){\n",
" this.canvas = this.root.append('svg:svg')\n",
" .attr('class', 'figure')\n",
" .attr('width', this.width)\n",
" .attr('height', this.height);\n",
" for (var i=0; i<this.axes.length; i++){\n",
" this.axes[i].draw();\n",
" }\n",
" };\n",
"\n",
" Figure.prototype.reset = function(duration){\n",
" duration = (typeof duration !== 'undefined') ? duration : 750;\n",
" for (var i=0; i<this.axes.length; i++){\n",
" this.axes[i].prep_reset();\n",
" }\n",
"\n",
" var transition = function(t){\n",
" for (var i=0; i<this.axes.length; i++){\n",
" this.axes[i].xdom(this.axes[i].xdom.domain(this.axes[i].ix(t)));\n",
" this.axes[i].ydom(this.axes[i].ydom.domain(this.axes[i].iy(t)));\n",
"\n",
" // don't propagate: this will be done as part of the loop.\n",
" this.axes[i].zoomed(false);\n",
" }\n",
" }.bind(this)\n",
"\n",
" d3.transition().duration(duration)\n",
" .tween(\"zoom\", function(){return transition;});\n",
"\n",
" for (var i=0; i<this.axes.length; i++){\n",
" this.axes[i].finalize_reset();\n",
" }\n",
" };\n",
"\n",
"\n",
"\n",
" function Axes(fig, bbox,\n",
" xlim, ylim,\n",
" xscale, yscale,\n",
" xdomain, ydomain,\n",
" xgridOn, ygridOn,\n",
" axclass, clipid,\n",
" zoomable){\n",
" this.axnum = fig.axes.length;\n",
" fig.axes.push(this);\n",
"\n",
" this.fig = fig;\n",
" this.bbox = bbox;\n",
" this.xlim = xlim;\n",
" this.ylim = ylim;\n",
" this.xdomain = xdomain;\n",
" this.ydomain = ydomain;\n",
" this.xscale = xscale;\n",
" this.yscale = yscale;\n",
" this.xgridOn = xgridOn;\n",
" this.ygridOn = ygridOn;\n",
" this.axclass = (typeof axclass !== 'undefined') ? axclass : \"axes\";\n",
" this.clipid = (typeof clipid != 'undefined') ? clipid : \"clip\";\n",
" this.zoomable = zoomable;\n",
"\n",
" this.sharex = [];\n",
" this.sharey = [];\n",
" this.elements = [];\n",
"\n",
" this.position = [this.bbox[0] * this.fig.width,\n",
" (1 - this.bbox[1] - this.bbox[3]) * this.fig.height];\n",
" this.width = bbox[2] * this.fig.width;\n",
" this.height = bbox[3] * this.fig.height;\n",
"\n",
" if(this.xscale === 'log'){\n",
" this.xdom = d3.scale.log();\n",
" }else if(this.xscale === 'date'){\n",
" this.xdom = d3.time.scale();\n",
" }else{\n",
" this.xdom = d3.scale.linear();\n",
" }\n",
"\n",
" if(this.yscale === 'log'){\n",
" this.ydom = d3.scale.log();\n",
" }else if(this.yscale === 'date'){\n",
" this.ydom = d3.time.scale();\n",
" }else{\n",
" this.ydom = d3.scale.linear();\n",
" }\n",
"\n",
" this.xdom.domain(this.xdomain)\n",
" .range([0, this.width]);\n",
"\n",
" this.ydom.domain(this.ydomain)\n",
" .range([this.height, 0]);\n",
"\n",
" if(this.xscale === 'date'){\n",
" this.xmap = d3.time.scale()\n",
" .domain(this.xdomain)\n",
" .range(this.xlim);\n",
" this.x = function(x){return this.xdom(this.xmap.invert(x));}\n",
" }else if(this.xscale === 'log'){\n",
" this.xmap = this.xdom;\n",
" this.x = this.xdom;\n",
" }else{\n",
" this.xmap = this.xdom;\n",
" this.x = this.xdom;\n",
" }\n",
"\n",
" if(this.yscale === 'date'){\n",
" this.ymap = d3.time.scale()\n",
" .domain(this.ydomain)\n",
" .range(this.ylim);\n",
" this.y = function(y){return this.ydom(this.ymap.invert(y));}\n",
" }else if(this.xscale === 'log'){\n",
" this.ymap = this.ydom;\n",
" this.y = this.ydom;\n",
" }else{\n",
" this.ymap = this.ydom;\n",
" this.y = this.ydom;\n",
" }\n",
" }\n",
"\n",
" Axes.prototype.draw = function(){\n",
" this.zoom = d3.behavior.zoom()\n",
" .x(this.xdom)\n",
" .y(this.ydom)\n",
" .on(\"zoom\", this.zoomed.bind(this));\n",
"\n",
" this.baseaxes = this.fig.canvas.append(\"g\")\n",
" .attr('transform', 'translate('\n",
" + this.position[0] + ','\n",
" + this.position[1] + ')')\n",
" .attr('width', this.width)\n",
" .attr('height', this.height)\n",
" .attr('class', \"baseaxes\");\n",
"\n",
" if(this.zoomable){\n",
" this.baseaxes.call(this.zoom);\n",
" }\n",
"\n",
" this.axesbg = this.baseaxes.append(\"svg:rect\")\n",
" .attr(\"width\", this.width)\n",
" .attr(\"height\", this.height)\n",
" .attr(\"class\", \"axesbg\");\n",
"\n",
" this.clip = this.baseaxes.append(\"svg:clipPath\")\n",
" .attr(\"id\", this.clipid)\n",
" .append(\"svg:rect\")\n",
" .attr(\"x\", 0)\n",
" .attr(\"y\", 0)\n",
" .attr(\"width\", this.width)\n",
" .attr(\"height\", this.height)\n",
"\n",
" this.axes = this.baseaxes.append(\"g\")\n",
" .attr(\"class\", this.axclass)\n",
" .attr(\"clip-path\", \"url(#\" + this.clipid + \")\");\n",
"\n",
" for(var i=0; i<this.elements.length; i++){\n",
" this.elements[i].draw();\n",
" }\n",
" };\n",
"\n",
" Axes.prototype.zoomed = function(propagate){\n",
" // propagate is a boolean specifying whether to propagate movements\n",
" // to shared axes, specified by sharex and sharey. Default is true.\n",
" propagate = (typeof propagate == 'undefined') ? true : propagate;\n",
"\n",
" //console.log(this.zoom.translate());\n",
" //console.log(this.zoom.scale());\n",
" //console.log(this.zoom.x().domain());\n",
" //console.log(this.zoom.y().domain());\n",
"\n",
" for(var i=0; i<this.elements.length; i++){\n",
" this.elements[i].zoomed();\n",
" }\n",
"\n",
" if(propagate){\n",
" // update shared x axes\n",
" for(var i=0; i<this.sharex.length; i++){\n",
" this.sharex[i].zoom.x().domain(this.zoom.x().domain());\n",
" this.sharex[i].zoomed(false);\n",
" }\n",
" // update shared y axes\n",
" for(var i=0; i<this.sharey.length; i++){\n",
" this.sharey[i].zoom.y().domain(this.zoom.y().domain());\n",
" this.sharey[i].zoomed(false);\n",
" }\n",
" }\n",
" };\n",
"\n",
" Axes.prototype.add_element = function(element){\n",
" this.elements.push(element);\n",
" };\n",
"\n",
" Axes.prototype.prep_reset = function(){\n",
" // interpolate() does not work on dates, so we map dates to numbers,\n",
" // interpolate the numbers, and then invert the map.\n",
" // we use the same strategy for log, so the interpolation will be smooth.\n",
" // There probably is a cleaner approach...\n",
"\n",
" if (this.xscale === 'date'){\n",
" var start = this.xdom.domain();\n",
" var end = this.xdomain;\n",
" var interp = d3.interpolate(\n",
" [this.xmap(start[0]), this.xmap(start[1])],\n",
" [this.xmap(end[0]), this.xmap(end[1])]);\n",
" this.ix = function(t){\n",
" return [this.xmap.invert(interp(t)[0]),\n",
" this.xmap.invert(interp(t)[1])];\n",
" }\n",
" }else{\n",
" this.ix = d3.interpolate(this.xdom.domain(), this.xlim);\n",
" }\n",
"\n",
" if (this.yscale === 'date'){\n",
" var start = this.ydom.domain();\n",
" var end = this.ydomain;\n",
" var interp = d3.interpolate(\n",
" [this.ymap(start[0]), this.ymap(start[1])],\n",
" [this.ymap(end[0]), this.ymap(end[1])]);\n",
" this.iy = function(t){\n",
" return [this.ymap.invert(interp(t)[0]),\n",
" this.ymap.invert(interp(t)[1])];\n",
" }\n",
" }else{\n",
" this.iy = d3.interpolate(this.ydom.domain(), this.ylim);\n",
" }\n",
" }\n",
"\n",
" Axes.prototype.finalize_reset = function(){\n",
" this.zoom.scale(1).translate([0, 0]);\n",
" }\n",
"\n",
" Axes.prototype.reset = function(){\n",
" this.prep_reset();\n",
" d3.transition().duration(750).tween(\"zoom\", function() {\n",
" return function(t) {\n",
" this.zoom.x(this.xdom.domain(this.ix(t)))\n",
" .y(this.ydom.domain(this.iy(t)));\n",
" this.zoomed();\n",
" };\n",
" });\n",
" this.finalize_reset();\n",
" };\n",
"\n",
"\n",
"\n",
" function Axis(axes, position, nticks, tickvalues, tickformat){\n",
" this.axes = axes;\n",
" this.position = position;\n",
" this.nticks = nticks;\n",
" this.tickvalues = tickvalues;\n",
" this.tickformat = tickformat;\n",
" if (position == \"bottom\"){\n",
" this.transform = \"translate(0,\" + this.axes.height + \")\";\n",
" this.scale = this.axes.xdom;\n",
" this.class = \"x axis\";\n",
" }else if (position == \"top\"){\n",
" this.transform = \"translate(0,0)\"\n",
" this.scale = this.axes.xdom;\n",
" this.class = \"x axis\";\n",
" }else if (position == \"left\"){\n",
" this.transform = \"translate(0,0)\";\n",
" this.scale = this.axes.ydom;\n",
" this.class = \"y axis\";\n",
" }else{\n",
" this.transform = \"translate(\" + this.axes.width + \",0)\";\n",
" this.scale = this.axes.ydom;\n",
" this.class = \"y axis\";\n",
" }\n",
" }\n",
"\n",
" Axis.prototype.draw = function(){\n",
" this.axis = d3.svg.axis()\n",
" .scale(this.scale)\n",
" .orient(this.position)\n",
" .ticks(this.nticks)\n",
" .tickValues(this.tickvalues)\n",
" .tickFormat(this.tickformat);\n",
" this.elem = this.axes.baseaxes.append('g')\n",
" .attr(\"transform\", this.transform)\n",
" .attr(\"class\", this.class)\n",
" .call(this.axis);\n",
" };\n",
"\n",
" Axis.prototype.zoomed = function(){\n",
" this.elem.call(this.axis);\n",
" };\n",
"\n",
"\n",
"\n",
" function Grid(axes, xy){\n",
" this.axes = axes;\n",
" this.class = xy + \" grid\"\n",
" if(xy == \"x\"){\n",
" this.transform = \"translate(0,\" + this.axes.height + \")\";\n",
" this.position = \"bottom\";\n",
" this.scale = this.axes.xdom;\n",
" this.tickSize = -this.axes.height;\n",
" }else{\n",
" this.transform = \"translate(0,0)\";\n",
" this.position = \"left\";\n",
" this.scale = this.axes.ydom;\n",
" this.tickSize = -this.axes.width;\n",
" }\n",
" }\n",
"\n",
" Grid.prototype.draw = function(){\n",
" this.grid = d3.svg.axis()\n",
" .scale(this.scale)\n",
" .orient(this.position)\n",
" .tickSize(this.tickSize, 0, 0)\n",
" .tickFormat(\"\");\n",
" this.elem = this.axes.axes.append(\"g\")\n",
" .attr(\"class\", this.class)\n",
" .attr(\"transform\", this.transform)\n",
" .call(this.grid);\n",
" };\n",
"\n",
" Grid.prototype.zoomed = function(){\n",
" this.elem.call(this.grid);\n",
" };\n",
"\n",
"\n",
"\n",
" // This function constructs a mapped SVG path\n",
" // from an input data array\n",
" var construct_SVG_path = function(data, xmap, ymap){\n",
" var result = \"\";\n",
" for (var i=0;i<data.length;i++){\n",
" result += data[i][0];\n",
" if(data[i][0] == 'Z'){\n",
" continue;\n",
" }\n",
" for (var j=0;j<data[i][1].length;j++){\n",
" if(j % 2 == 0){\n",
" result += \" \" + xmap(data[i][1][j]);\n",
" }else{\n",
" result += \" \" + ymap(data[i][1][j]);\n",
" }\n",
" }\n",
" result += \" \";\n",
" }\n",
" return result;\n",
" };\n",
"\n",
"\n",
" </script>\n",
"\n",
"\n",
" <style>\n",
"\n",
"\n",
" div#figuref17e48980fb84d15aaaa1331972e9acf\n",
" .axesbg{\n",
" fill: #FFFFFF;\n",
" }\n",
"\n",
"\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
".axis text {\n",
" font-family: sans-serif;\n",
" font-size: 10.0px;\n",
" fill: black;\n",
" stroke: none;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
".axis text {\n",
" font-family: sans-serif;\n",
" font-size: 10.0px;\n",
" fill: black;\n",
" stroke: none;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
".grid .tick {\n",
" stroke: #D3D3D3;\n",
" stroke-dasharray: 2,2;\n",
" stroke-opacity: 0.7;\n",
"}\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
".grid path {\n",
" stroke-width: 0;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
".grid .tick {\n",
" stroke: #D3D3D3;\n",
" stroke-dasharray: 2,2;\n",
" stroke-opacity: 0.7;\n",
"}\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
".grid path {\n",
" stroke-width: 0;\n",
"}\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
"text.text25a37e558304491da2097bd47d2168fa {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
"text.text0d11bace047c4c6eb1b6822679ddb11f {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figuref17e48980fb84d15aaaa1331972e9acf\n",
"text.text26b839b71fdb44ce8665019008faaae4 {\n",
" font-size : 14.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" </style>\n",
"\n",
"\n",
"\n",
" <div id='figuref17e48980fb84d15aaaa1331972e9acf'>\n",
"\n",
" </div>\n",
" <script type=\"text/javascript\">\n",
" var create_figf17e48980fb84d15aaaa1331972e9acf = function(){\n",
" var figwidth = 6.0 * 80;\n",
" var figheight = 4.0 * 80;\n",
" var fig = new Figure(\"div#figuref17e48980fb84d15aaaa1331972e9acf\",\n",
" figwidth, figheight);\n",
"\n",
"\n",
"\n",
" var ax1 = new Axes(fig, [0.125, 0.125, 0.77500000000000002, 0.77500000000000002], [-3.0, 3.0], [-4.0, 3.0],\n",
" \"linear\", \"linear\",\n",
" [-3.0, 3.0], [-4.0, 3.0],\n",
" true, true,\n",
" \"axes1\",\n",
" \"clipf17e48980fb84d15aaaa1331972e9acf1\", true);\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax1.add_element(new Axis(ax1, \"bottom\",\n",
" 7, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax1.add_element(new Axis(ax1, \"left\",\n",
" 8, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add a Grid element\n",
"ax1.add_element(new Grid(ax1, \"x\"));\n",
"\n",
"\n",
"\n",
"// Add a Grid element\n",
"ax1.add_element(new Grid(ax1, \"y\"));\n",
"\n",
"\n",
"\n",
"// Add a Collection\n",
"var coll8cec3aed8a0f4e2fa0ed2598b6840356 = new function(){\n",
" this.ax = ax1;\n",
" this.data = [{\"s\": 16.348522912120725, \"fc\": \"#004CFF\", \"o\": [1.764052345967664, -0.3691818379424436]}, {\"s\": 18.057420231551603, \"fc\": \"#00DCFE\", \"o\": [0.4001572083672233, -0.2393791775759264]}, {\"s\": 14.686860930116316, \"fc\": \"#FFDA00\", \"o\": [0.9787379841057392, 1.0996595958871132]}, {\"s\": 21.963488223860693, \"fc\": \"#FF1A00\", \"o\": [2.240893199201458, 0.6552637307225978]}, {\"s\": 21.531224080511169, \"fc\": \"#9DFF59\", \"o\": [1.8675579901499675, 0.640131526097592]}, {\"s\": 23.923899504768666, \"fc\": \"#009CFF\", \"o\": [-0.977277879876411, -1.6169560443108344]}, {\"s\": 4.2275221872632205, \"fc\": \"#00009F\", \"o\": [0.9500884175255894, -0.024326124398935636]}, {\"s\": 23.513737660604505, \"fc\": \"#FFBD00\", \"o\": [-0.1513572082976979, -0.7380309092056887]}, {\"s\": 15.566836950098674, \"fc\": \"#000084\", \"o\": [-0.10321885179355784, 0.27992459904323824]}, {\"s\": 23.285301030086014, \"fc\": \"#12FCE4\", \"o\": [0.41059850193837233, -0.09815038964295794]}, {\"s\": 20.649705945900994, \"fc\": \"#93FF63\", \"o\": [0.144043571160878, 0.9101789080925919]}, {\"s\": 24.687538180298255, \"fc\": \"#D50000\", \"o\": [1.454273506962975, 0.31721821519130206]}, {\"s\": 21.649315726600737, \"fc\": \"#0000E3\", \"o\": [0.7610377251469934, 0.7863279621089762]}, {\"s\": 15.000918202283376, \"fc\": \"#2CFFCA\", \"o\": [0.12167501649282841, -0.46641909673594306]}, {\"s\": 17.58687734750734, \"fc\": \"#000096\", \"o\": [0.44386323274542566, -0.9444462559182504]}, {\"s\": 15.242669867443535, \"fc\": \"#00DCFE\", \"o\": [0.33367432737426683, -0.41004969320254847]}, {\"s\": 15.008471599939693, \"fc\": \"#E0FF15\", \"o\": [1.4940790731576061, -0.017020413861440594]}, {\"s\": 12.690632770345427, \"fc\": \"#0098FF\", \"o\": [-0.20515826376580087, 0.3791517355550818]}, {\"s\": 17.49727131060602, \"fc\": \"#0054FF\", \"o\": [0.31306770165090136, 2.259308950690852]}, {\"s\": 20.514071428802847, \"fc\": \"#0000FF\", \"o\": [-0.8540957393017248, -0.04225715166064269]}, {\"s\": 13.08425383186103, \"fc\": \"#BAFF3C\", \"o\": [-2.5529898158340787, -0.955945000492777]}, {\"s\": 17.991421328113333, \"fc\": \"#FFCB00\", \"o\": [0.6536185954403606, -0.34598177569938643]}, {\"s\": 8.5121660997786268, \"fc\": \"#FFE200\", \"o\": [0.8644361988595057, -0.4635959746460942]}, {\"s\": 9.9332738891519661, \"fc\": \"#B60000\", \"o\": [-0.7421650204064419, 0.4814814737734622]}, {\"s\": 5.3752033962198853, \"fc\": \"#00007F\", \"o\": [2.2697546239876076, -1.5407970144446248]}, {\"s\": 24.478908063511984, \"fc\": \"#F4F802\", \"o\": [-1.4543656745987648, 0.06326199420033171]}, {\"s\": 1.5436751701784179, \"fc\": \"#CDFF29\", \"o\": [0.04575851730144607, 0.1565065379653756]}, {\"s\": 10.499264173442748, \"fc\": \"#C3FF32\", \"o\": [-0.1871838500258336, 0.23218103620027578]}, {\"s\": 19.45026505130572, \"fc\": \"#A80000\", \"o\": [1.5327792143584575, -0.5973160689653627]}, {\"s\": 7.0871819110498295, \"fc\": \"#00008D\", \"o\": [1.469358769900285, -0.237921729736007]}, {\"s\": 23.331964286514335, \"fc\": \"#FFC800\", \"o\": [0.1549474256969163, -1.4240609089825316]}, {\"s\": 21.076289378747887, \"fc\": \"#FF5900\", \"o\": [0.37816251960217356, -0.49331988336219407]}, {\"s\": 24.424107341029007, \"fc\": \"#83FF73\", \"o\": [-0.8877857476301128, -0.5428614760167177]}, {\"s\": 17.701843860867893, \"fc\": \"#00D4FF\", \"o\": [-1.980796468223927, 0.4160500462614255]}, {\"s\": 13.617428990821058, \"fc\": \"#FF6F00\", \"o\": [-0.3479121493261526, -1.1561824318219127]}, {\"s\": 18.417325659322138, \"fc\": \"#0000EC\", \"o\": [0.15634896910398005, 0.7811981017099934]}, {\"s\": 23.970387045732192, \"fc\": \"#49FFAD\", \"o\": [1.2302906807277207, 1.4944845444913688]}, {\"s\": 17.929240845886099, \"fc\": \"#89FF6C\", \"o\": [1.2023798487844113, -2.0699850250135325]}, {\"s\": 12.84299856967564, \"fc\": \"#FFCB00\", \"o\": [-0.3873268174079523, 0.42625873077810095]}, {\"s\": 23.272391171691449, \"fc\": \"#0000E3\", \"o\": [-0.30230275057533557, 0.6769080350302455]}, {\"s\": 15.151880226242822, \"fc\": \"#0064FF\", \"o\": [-1.0485529650670926, -0.637437025552229]}, {\"s\": 0.92407778485829029, \"fc\": \"#2FFFC7\", \"o\": [-1.4200179371789752, -0.39727181432879766]}, {\"s\": 12.364950027913077, \"fc\": \"#E0FF15\", \"o\": [-1.7062701906250126, -0.13288057758695562]}, {\"s\": 14.015721093244498, \"fc\": \"#FE1200\", \"o\": [1.9507753952317897, -0.2977908794017283]}, {\"s\": 23.024107980360448, \"fc\": \"#DDFF18\", \"o\": [-0.5096521817516535, -0.3090129690471222]}, {\"s\": 16.823395802789392, \"fc\": \"#0004FF\", \"o\": [-0.4380743016111864, -1.6760038063299767]}, {\"s\": 16.566128015151374, \"fc\": \"#910000\", \"o\": [-1.2527953600499262, 1.15233156478312]}, {\"s\": 14.403837503066512, \"fc\": \"#FF2100\", \"o\": [0.7774903558319101, 1.079618592036821]}, {\"s\": 23.315841632176088, \"fc\": \"#7CFF79\", \"o\": [-1.6138978475579515, -0.8133642592042029]}, {\"s\": 24.152636756861217, \"fc\": \"#D50000\", \"o\": [-0.2127402802139687, -1.466424327802514]}, {\"s\": 24.744251473011822, \"fc\": \"#9DFF59\", \"o\": [-0.8954665611936756, 0.5210648764527586]}, {\"s\": 15.249797953751347, \"fc\": \"#D50000\", \"o\": [0.386902497859262, -0.5757879698130661]}, {\"s\": 24.421042404359767, \"fc\": \"#FF4A00\", \"o\": [-0.510805137568873, 0.14195316332077967]}, {\"s\": 22.10915080130572, \"fc\": \"#9F0000\", \"o\": [-1.180632184122412, -0.3193284171450952]}, {\"s\": 20.422831988905905, \"fc\": \"#DA0000\", \"o\": [-0.028182228338654868, 0.6915387510701866]}, {\"s\": 12.294972359507321, \"fc\": \"#0000A3\", \"o\": [0.42833187053041766, 0.6947491436560059]}, {\"s\": 11.559221131868624, \"fc\": \"#0030FF\", \"o\": [0.06651722238316789, -0.7255973784635843]}, {\"s\": 10.124162044924017, \"fc\": \"#1FFFD7\", \"o\": [0.3024718977397814, -1.3833639553950554]}, {\"s\": 23.866353844232819, \"fc\": \"#B60000\", \"o\": [-0.6343220936809636, -1.582938397335082]}, {\"s\": 13.473262557384754, \"fc\": \"#00B0FF\", \"o\": [-0.3627411659871381, 0.6103793791072052]}, {\"s\": 16.723869343924001, \"fc\": \"#0020FF\", \"o\": [-0.672460447775951, -1.188859257784029]}, {\"s\": 17.461736546002228, \"fc\": \"#FF1600\", \"o\": [-0.3595531615405413, -0.5068163542986875]}, {\"s\": 21.916953180077012, \"fc\": \"#4CFFAA\", \"o\": [-0.813146282044454, -0.5963140384505081]}, {\"s\": 22.828330913947291, \"fc\": \"#E80000\", \"o\": [-1.7262826023316769, -0.05256729626954629]}, {\"s\": 9.2653843087069294, \"fc\": \"#0020FF\", \"o\": [0.17742614225375283, -1.936279805846507]}, {\"s\": 16.233336379402587, \"fc\": \"#FFE900\", \"o\": [-0.4017809362082619, 0.18877859679382855]}, {\"s\": 22.809664507838747, \"fc\": \"#49FFAD\", \"o\": [-1.6301983469660446, 0.5238910238342056]}, {\"s\": 22.47128903097196, \"fc\": \"#0000D1\", \"o\": [0.4627822555257742, 0.08842208704466141]}, {\"s\": 7.9509980137761227, \"fc\": \"#FFC800\", \"o\": [-0.9072983643832422, -0.3108861716984717]}, {\"s\": 9.8251173733435451, \"fc\": \"#0078FF\", \"o\": [0.05194539579613895, 0.09740016626878341]}, {\"s\": 13.703173724473146, \"fc\": \"#0000A8\", \"o\": [0.7290905621775369, 0.3990463456401302]}, {\"s\": 6.8204064306025884, \"fc\": \"#0000BF\", \"o\": [0.12898291075741067, -2.77259275642665]}, {\"s\": 16.190665708192483, \"fc\": \"#0000BF\", \"o\": [1.1394006845433007, 1.9559123082506942]}, {\"s\": 8.1505019594562373, \"fc\": \"#E80000\", \"o\": [-1.2348258203536526, 0.39009332268792646]}, {\"s\": 18.72836354385424, \"fc\": \"#FF9F00\", \"o\": [0.402341641177549, -0.65240858238702]}, {\"s\": 12.336759779566853, \"fc\": \"#F50B00\", \"o\": [-0.6848100909403132, -0.3909533751876011]}, {\"s\": 19.187718959214298, \"fc\": \"#FFDE00\", \"o\": [-0.8707971491818818, 0.49374177734918845]}, {\"s\": 8.5174346578294102, \"fc\": \"#93FF63\", \"o\": [-0.5788496647644155, -0.11610393903436653]}, {\"s\": 24.543786375395911, \"fc\": \"#00B4FF\", \"o\": [-0.31155253212737266, -2.0306844677814944]}, {\"s\": 23.992812759438387, \"fc\": \"#7F0000\", \"o\": [0.05616534222974544, 2.0644928613593194]}, {\"s\": 15.551526036918505, \"fc\": \"#08F0ED\", \"o\": [-1.1651498407833565, -0.11054065723247261]}, {\"s\": 12.226731343130503, \"fc\": \"#63FF93\", \"o\": [0.9008264869541871, 1.0201727117157997]}, {\"s\": 12.432489616233788, \"fc\": \"#15FFE1\", \"o\": [0.46566243973045984, -0.6920498477843912]}, {\"s\": 17.273999858532697, \"fc\": \"#960000\", \"o\": [-1.5362436862772237, 1.5363770542457977]}, {\"s\": 4.9685928343474668, \"fc\": \"#0030FF\", \"o\": [1.4882521937955997, 0.28634368889227957]}, {\"s\": 19.871580085843778, \"fc\": \"#00CCFF\", \"o\": [1.8958891760305832, 0.6088438344754508]}, {\"s\": 15.875730922023227, \"fc\": \"#FFD700\", \"o\": [1.1787795711596507, -1.0452533661469547]}, {\"s\": 15.263257192244291, \"fc\": \"#0000C3\", \"o\": [-0.17992483581235091, 1.2111452896827009]}, {\"s\": 22.351912828482885, \"fc\": \"#D4FF22\", \"o\": [-1.0707526215105425, 0.6898181645347884]}, {\"s\": 20.920712463720857, \"fc\": \"#69FF8D\", \"o\": [1.0544517269311366, 1.3018462295649984]}, {\"s\": 24.27127824761742, \"fc\": \"#00A0FF\", \"o\": [-0.40317694697317963, -0.6280875596415789]}, {\"s\": 14.739219548489482, \"fc\": \"#0070FF\", \"o\": [1.2224450703824274, -0.4810271184607877]}, {\"s\": 23.538027606635694, \"fc\": \"#86FF70\", \"o\": [0.2082749780768603, 2.303916697683942]}, {\"s\": 21.801109755563566, \"fc\": \"#0CF4EA\", \"o\": [0.9766390364837128, -1.0600158227215473]}, {\"s\": 14.853703275089035, \"fc\": \"#56FFA0\", \"o\": [0.3563663971744019, -0.13594970067832082]}, {\"s\": 19.58938734560336, \"fc\": \"#00D4FF\", \"o\": [0.7065731681919482, 1.1368913626026953]}, {\"s\": 13.34652027641291, \"fc\": \"#9F0000\", \"o\": [0.010500020720820478, 0.0977249677148556]}, {\"s\": 23.23258563378997, \"fc\": \"#0004FF\", \"o\": [1.7858704939058352, 0.5829536797532936]}, {\"s\": 8.3306409432959025, \"fc\": \"#0000EC\", \"o\": [0.12691209270361992, -0.3994490292628752]}, {\"s\": 11.451302187369132, \"fc\": \"#00DCFE\", \"o\": [0.40198936344470165, 0.37005588784751875]}, {\"s\": 10.629370330813623, \"fc\": \"#C7FF2F\", \"o\": [1.8831506970562544, -1.3065268517353166]}, {\"s\": 15.772808341117006, \"fc\": \"#FEED00\", \"o\": [-1.3477590611424464, 1.658130679618188]}, {\"s\": 21.448084895832661, \"fc\": \"#25FFD0\", \"o\": [-1.2704849984857336, -0.11816404512856976]}, {\"s\": 18.034730709400826, \"fc\": \"#7F0000\", \"o\": [0.9693967081580112, -0.6801782039968504]}, {\"s\": 17.350353530005592, \"fc\": \"#00E4F7\", \"o\": [-1.17312340511416, 0.6663830820319143]}, {\"s\": 0.58053024771827, \"fc\": \"#FFB100\", \"o\": [1.9436211856492926, -0.4607197873885533]}, {\"s\": 16.204741825360163, \"fc\": \"#EDFF08\", \"o\": [-0.41361898075974735, -1.3342584714027534]}, {\"s\": 6.2634435582597208, \"fc\": \"#FF5900\", \"o\": [-0.7474548114407578, -1.3467175057975553]}, {\"s\": 11.338050546652489, \"fc\": \"#960000\", \"o\": [1.9229420264803847, 0.6937731526901325]}, {\"s\": 23.990660978246197, \"fc\": \"#FE1200\", \"o\": [1.4805147914344243, -0.1595734381462669]}, {\"s\": 11.530908660329553, \"fc\": \"#FF8900\", \"o\": [1.8675589604265699, -0.13370155966843916]}, {\"s\": 23.018211236750528, \"fc\": \"#FFC800\", \"o\": [0.9060446582753853, 1.0777438059762627]}, {\"s\": 22.262371668845418, \"fc\": \"#00D4FF\", \"o\": [-0.8612256850547025, -1.1268258087567435]}, {\"s\": 9.9115295421837892, \"fc\": \"#0014FF\", \"o\": [1.9100649530990337, -0.7306777528648248]}, {\"s\": 19.336397542456691, \"fc\": \"#0000C3\", \"o\": [-0.2680033709513804, -0.38487980918127546]}, {\"s\": 8.4496282300061498, \"fc\": \"#0074FF\", \"o\": [0.8024563957963952, 0.094351589317074]}, {\"s\": 21.197020498312288, \"fc\": \"#42FFB3\", \"o\": [0.947251967773748, -0.042171451290578935]}, {\"s\": 19.836714267887377, \"fc\": \"#8DFF69\", \"o\": [-0.1550100930908342, -0.2868871923899076]}, {\"s\": 22.387421535745197, \"fc\": \"#FF8100\", \"o\": [0.6140793703460803, -0.0616264020956474]}, {\"s\": 17.202220452948637, \"fc\": \"#AC0000\", \"o\": [0.9222066715665268, -0.10730527629117469]}, {\"s\": 23.76405481250449, \"fc\": \"#0000FF\", \"o\": [0.37642553115562943, -0.7196043885517929]}, {\"s\": 5.5192674180882175, \"fc\": \"#0000F5\", \"o\": [-1.0994007905841945, -0.8129929885540773]}, {\"s\": 13.446018388746271, \"fc\": \"#C3FF32\", \"o\": [0.298238174206056, 0.2745163577239395]}, {\"s\": 21.009295377581058, \"fc\": \"#FF9B00\", \"o\": [1.3263858966870303, -0.8909150829955279]}, {\"s\": 16.065245283446018, \"fc\": \"#FF3700\", \"o\": [-0.6945678597313655, -1.1573552591908536]}, {\"s\": 10.332477690714308, \"fc\": \"#C80000\", \"o\": [-0.14963454032767076, -0.3122922511256933]}, {\"s\": 8.1350766736864131, \"fc\": \"#910000\", \"o\": [-0.43515355172163744, -0.1576670161638159]}, {\"s\": 22.461752285096775, \"fc\": \"#29FFCD\", \"o\": [1.8492637284793418, 2.2567234972982093]}, {\"s\": 17.08986737672652, \"fc\": \"#18FFDD\", \"o\": [0.6722947570124355, -0.7047002758562337]}, {\"s\": 23.33708530573924, \"fc\": \"#0014FF\", \"o\": [0.40746183624111043, 0.9432607249694948]}, {\"s\": 21.275516768712269, \"fc\": \"#FFD300\", \"o\": [-0.7699160744453164, 0.7471883342046318]}, {\"s\": 15.903377342035718, \"fc\": \"#FEED00\", \"o\": [0.5392491912918173, -1.188944955203736]}, {\"s\": 15.184279845191494, \"fc\": \"#FF2C00\", \"o\": [-0.6743326606573761, 0.7732529774025997]}, {\"s\": 17.84083169896093, \"fc\": \"#0000EC\", \"o\": [0.03183055827435118, -1.1838806401933177]}, {\"s\": 23.426532825848838, \"fc\": \"#79FF7D\", \"o\": [-0.635846078378881, -2.659172237996741]}, {\"s\": 21.333312785206651, \"fc\": \"#BDFF39\", \"o\": [0.6764332949464997, 0.6063195243593807]}, {\"s\": 1.7834915590975935, \"fc\": \"#0074FF\", \"o\": [0.5765908166149409, -1.7558905834377194]}, {\"s\": 20.700060406799281, \"fc\": \"#0028FF\", \"o\": [-0.20829875557799488, 0.45093446180591484]}, {\"s\": 23.82429778097729, \"fc\": \"#FF2C00\", \"o\": [0.3960067126616453, -0.6840108977372166]}, {\"s\": 20.941655568883171, \"fc\": \"#0000BF\", \"o\": [-1.0930615087305058, 1.6595507961898721]}, {\"s\": 10.452886114757201, \"fc\": \"#63FF93\", \"o\": [-1.4912575927056055, 1.068509399316009]}, {\"s\": 17.276225857909271, \"fc\": \"#0000FF\", \"o\": [0.4393917012645369, -0.45338580385138766]}, {\"s\": 9.3067086490689039, \"fc\": \"#56FFA0\", \"o\": [0.16667349537252904, -0.6878376110286823]}, {\"s\": 14.886303223649568, \"fc\": \"#910000\", \"o\": [0.6350314368921064, -1.2140774030941206]}, {\"s\": 24.051347360175598, \"fc\": \"#3CFFBA\", \"o\": [2.383144774863942, -0.4409226322925914]}, {\"s\": 23.873448596207165, \"fc\": \"#FF3000\", \"o\": [0.9444794869904138, -0.2803554951845091]}, {\"s\": 13.213275501986978, \"fc\": \"#0000FF\", \"o\": [-0.9128222254441586, -0.3646935443916854]}, {\"s\": 14.479253872185012, \"fc\": \"#0090FF\", \"o\": [1.117016288095853, 0.15670385527236397]}, {\"s\": 19.248422544494808, \"fc\": \"#2CFFCA\", \"o\": [-1.3159074105115212, 0.5785214977288784]}, {\"s\": 24.383728829738281, \"fc\": \"#29FFCD\", \"o\": [-0.461584604814709, 0.349654456993174]}, {\"s\": 9.5517219075090924, \"fc\": \"#FFE200\", \"o\": [-0.06824160532463124, -0.764143923906443]}, {\"s\": 12.593272838870766, \"fc\": \"#00DCFE\", \"o\": [1.7133427216493666, -1.4377914738015785]}, {\"s\": 23.22138259102476, \"fc\": \"#FFB900\", \"o\": [-0.7447548220484399, 1.3645318481024713]}, {\"s\": 17.425188092725982, \"fc\": \"#EDFF08\", \"o\": [-0.8264385386590144, -0.6894491845499376]}, {\"s\": 23.556618060772873, \"fc\": \"#25FFD0\", \"o\": [-0.0984525244254323, -0.6522935999350191]}, {\"s\": 10.701271919417742, \"fc\": \"#42FFB3\", \"o\": [-0.6634782863621074, -0.5211893123011109]}, {\"s\": 18.133057382693352, \"fc\": \"#DAFF1C\", \"o\": [1.126635922106507, -1.8430695501566485]}, {\"s\": 14.19158228698458, \"fc\": \"#0000CC\", \"o\": [-1.0799315083634233, -0.4779740040404867]}, {\"s\": 13.978434887673792, \"fc\": \"#FF5100\", \"o\": [-1.1474686524111024, -0.47965581400794766]}, {\"s\": 16.608731972807778, \"fc\": \"#FAF000\", \"o\": [-0.43782004474443403, 0.6203582983435125]}, {\"s\": 16.350283138358392, \"fc\": \"#FFAE00\", \"o\": [-0.4980324506923049, 0.698457149107336]}, {\"s\": 14.852087180876866, \"fc\": \"#9AFF5C\", \"o\": [1.9295320538169858, 0.00377088908626934]}, {\"s\": 23.765453326199449, \"fc\": \"#0000FA\", \"o\": [0.9494208069257608, 0.9318483741143037]}, {\"s\": 21.25309251909572, \"fc\": \"#2CFFCA\", \"o\": [0.0875512413851909, 0.339964983801262]}, {\"s\": 21.192052309034288, \"fc\": \"#2CFFCA\", \"o\": [-1.225435518830168, -0.01568211160255477]}, {\"s\": 13.377552821843278, \"fc\": \"#00C4FF\", \"o\": [0.8443629764015471, 0.16092816829822298]}, {\"s\": 18.884140323327827, \"fc\": \"#00009A\", \"o\": [-1.0002153473895647, -0.19065349358139935]}, {\"s\": 21.931141302456027, \"fc\": \"#FFA300\", \"o\": [-1.5447710967776116, -0.3948495140334503]}, {\"s\": 22.160892711427838, \"fc\": \"#0000FA\", \"o\": [1.1880297923523018, -0.26773353689396645]}, {\"s\": 14.58331662971133, \"fc\": \"#D4FF22\", \"o\": [0.3169426119248496, -1.1280113314700069]}, {\"s\": 21.813926299452167, \"fc\": \"#FFC400\", \"o\": [0.920858823780819, 0.280441705316296]}, {\"s\": 21.313270322890975, \"fc\": \"#EAFF0C\", \"o\": [0.3187276529430212, -0.9931236109295807]}, {\"s\": 9.346105203915398, \"fc\": \"#AC0000\", \"o\": [0.8568306119026912, 0.8416312640736364]}, {\"s\": 23.119996536674702, \"fc\": \"#0000F1\", \"o\": [-0.6510255933001469, -0.24945858016094885]}, {\"s\": 16.505170723297347, \"fc\": \"#FF2500\", \"o\": [-1.0342428417844647, 0.04949498165009074]}, {\"s\": 17.327820506674286, \"fc\": \"#00009A\", \"o\": [0.681594518281627, 0.49383677628095635]}, {\"s\": 16.63643886428774, \"fc\": \"#96FF5F\", \"o\": [-0.8034096641738411, 0.6433144650629279]}, {\"s\": 18.722238731900198, \"fc\": \"#2CFFCA\", \"o\": [-0.6895497777502005, -1.5706234086334527]}, {\"s\": 19.581568042848367, \"fc\": \"#8DFF69\", \"o\": [-0.45553250351734315, -0.20690367616397173]}, {\"s\": 17.536198290135545, \"fc\": \"#0CF4EA\", \"o\": [0.01747915902505673, 0.8801789120807822]}, {\"s\": 23.131248481929699, \"fc\": \"#0040FF\", \"o\": [-0.35399391125348395, -1.6981058194322545]}, {\"s\": 19.684780675537198, \"fc\": \"#000091\", \"o\": [-1.3749512934180188, 0.3872804753950634]}, {\"s\": 15.741506612631021, \"fc\": \"#89FF6C\", \"o\": [-0.6436184028328905, -2.2555642294021894]}, {\"s\": 16.037990332154024, \"fc\": \"#FF3F00\", \"o\": [-2.2234031522244266, -1.0225068436356035]}, {\"s\": 22.372252091817813, \"fc\": \"#12FCE4\", \"o\": [0.6252314510271875, 0.0386305518401881]}, {\"s\": 14.660603602569678, \"fc\": \"#0060FF\", \"o\": [-1.6020576556067476, -1.6567151023219537]}, {\"s\": 11.424869877488288, \"fc\": \"#0000D5\", \"o\": [-1.1043833394284506, -0.9855107376841507]}, {\"s\": 6.054443731050978, \"fc\": \"#0000DE\", \"o\": [0.052165079260974405, -1.4718350074635869]}, {\"s\": 23.254189160906442, \"fc\": \"#0060FF\", \"o\": [-0.7395629963913133, 1.6481349322075596]}, {\"s\": 23.811845418116281, \"fc\": \"#0000EC\", \"o\": [1.5430145954067358, 0.16422775548733395]}, {\"s\": 8.6109384270669498, \"fc\": \"#008CFF\", \"o\": [-1.2928569097234486, 0.5672902778526694]}, {\"s\": 14.368899489121146, \"fc\": \"#0000C8\", \"o\": [0.26705086934918293, -0.2226751005151545]}, {\"s\": 10.404535736797616, \"fc\": \"#0000C8\", \"o\": [-0.0392828182274956, -0.35343174875719907]}, {\"s\": 8.4582660579656146, \"fc\": \"#FF3000\", \"o\": [-1.1680934977411974, -1.6164741886510325]}, {\"s\": 23.568481031839255, \"fc\": \"#0020FF\", \"o\": [0.5232766605317537, -0.2918373627478628]}, {\"s\": 5.9253201791572474, \"fc\": \"#ADFF49\", \"o\": [-0.1715463312222481, -0.7614922118116233]}, {\"s\": 24.601586612854003, \"fc\": \"#FF8100\", \"o\": [0.7717905512136674, 0.8579239242923363]}, {\"s\": 7.7160591192472481, \"fc\": \"#56FFA0\", \"o\": [0.8235041539637314, 1.1411018666575734]}, {\"s\": 23.08693512738942, \"fc\": \"#0018FF\", \"o\": [2.16323594928069, 1.4665787155741776]}, {\"s\": 18.700137105676205, \"fc\": \"#0048FF\", \"o\": [1.336527949436392, 0.852551939461232]}];\n",
"\n",
" this.offset_func = function(d){\n",
" var offset = d.o ? d.o : [[0, 0]];\n",
"\n",
" offset = [this.ax.x(offset[0]), this.ax.y(offset[1])];\n",
"\n",
" return \"translate(\" + offset + \")\";\n",
" };\n",
"\n",
" this.path_func = function(d){\n",
" var path = d.p ? d.p : [[\"M\", [0.0, -0.5]], [\"C\", [0.13260155, -0.5, 0.25978993539242673, -0.44731684579412084, 0.3535533905932738, -0.3535533905932738]], [\"C\", [0.44731684579412084, -0.25978993539242673, 0.5, -0.13260155, 0.5, 0.0]], [\"C\", [0.5, 0.13260155, 0.44731684579412084, 0.25978993539242673, 0.3535533905932738, 0.3535533905932738]], [\"C\", [0.25978993539242673, 0.44731684579412084, 0.13260155, 0.5, 0.0, 0.5]], [\"C\", [-0.13260155, 0.5, -0.25978993539242673, 0.44731684579412084, -0.3535533905932738, 0.3535533905932738]], [\"C\", [-0.44731684579412084, 0.25978993539242673, -0.5, 0.13260155, -0.5, 0.0]], [\"C\", [-0.5, -0.13260155, -0.44731684579412084, -0.25978993539242673, -0.3535533905932738, -0.3535533905932738]], [\"C\", [-0.25978993539242673, -0.44731684579412084, -0.13260155, -0.5, 0.0, -0.5]], [\"Z\", [0.0, -0.5]]];\n",
" var size = d.s ? d.s : 1;\n",
"\n",
" var xscale = function(x){return size * x;};\n",
" var yscale = function(y){return size * y;};\n",
"\n",
" return construct_SVG_path(path, xscale, yscale);\n",
" };\n",
"\n",
" this.style_func = function(d){\n",
" var edgecolor = d.ec ? d.ec : \"#000000\";\n",
" var facecolor = d.fc ? d.fc : \"none\";\n",
" var linewidth = d.lw ? d.lw : 1.0;\n",
" var dasharray = d.ls ? d.ls : \"10,0\";\n",
" return \"stroke: \" + edgecolor + \"; \" +\n",
" \"stroke-width: \" + linewidth + \"; \" +\n",
" \"stroke-dasharray: \" + dasharray + \"; \" +\n",
" \"fill: \" + facecolor + \"; \" +\n",
" \"stroke-opacity: 0.3; \" +\n",
" \"fill-opacity: 0.3\";\n",
" };\n",
"\n",
" this.draw = function(){\n",
" this.g = this.ax.axes.append(\"svg:g\");\n",
"\n",
" this.g.selectAll(\"paths-5\")\n",
" .data(this.data)\n",
" .enter().append(\"svg:path\")\n",
" .attr('class', 'paths5')\n",
" .attr(\"d\", this.path_func.bind(this))\n",
" .attr(\"style\", this.style_func.bind(this))\n",
" .attr(\"transform\", this.offset_func.bind(this));\n",
" };\n",
"\n",
" this.zoomed = function(){\n",
" this.g.selectAll(\".paths5\")\n",
"\n",
"\n",
" .attr(\"transform\", this.offset_func.bind(this))\n",
" ;\n",
" };\n",
"};\n",
"ax1.add_element(coll8cec3aed8a0f4e2fa0ed2598b6840356);\n",
"\n",
"\n",
"\n",
"\n",
"// Add a text element\n",
"ax1.add_element(new function(){\n",
" this.position = [246.0, 0.0];\n",
" this.rotation = -0.0;\n",
" this.ax = ax1;\n",
" this.text = \"x axis\";\n",
"\n",
" this.draw = function(){\n",
"\n",
" this.obj = this.ax.fig.canvas.append(\"text\")\n",
" .attr(\"x\", this.position[0])\n",
" .attr(\"y\", this.ax.fig.height - this.position[1])\n",
"\n",
" .attr(\"transform\", \"rotate(\" + this.rotation + \",\"\n",
" + this.position[0] + \",\"\n",
" + (figheight - this.position[1]) + \")\")\n",
"\n",
"\n",
" .attr(\"class\", \"text\")\n",
" .text(this.text)\n",
" .attr(\"class\", \"text25a37e558304491da2097bd47d2168fa\")\n",
" .attr(\"style\", \"text-anchor: middle;\");\n",
" }\n",
"\n",
" this.zoomed = function(){\n",
"\n",
" }\n",
"});\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"// Add a text element\n",
"ax1.add_element(new function(){\n",
" this.position = [10.0, 164.0];\n",
" this.rotation = -90.0;\n",
" this.ax = ax1;\n",
" this.text = \"y axis\";\n",
"\n",
" this.draw = function(){\n",
"\n",
" this.obj = this.ax.fig.canvas.append(\"text\")\n",
" .attr(\"x\", this.position[0])\n",
" .attr(\"y\", this.ax.fig.height - this.position[1])\n",
"\n",
" .attr(\"transform\", \"rotate(\" + this.rotation + \",\"\n",
" + this.position[0] + \",\"\n",
" + (figheight - this.position[1]) + \")\")\n",
"\n",
"\n",
" .attr(\"class\", \"text\")\n",
" .text(this.text)\n",
" .attr(\"class\", \"text0d11bace047c4c6eb1b6822679ddb11f\")\n",
" .attr(\"style\", \"text-anchor: middle;\");\n",
" }\n",
"\n",
" this.zoomed = function(){\n",
"\n",
" }\n",
"});\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"// Add a text element\n",
"ax1.add_element(new function(){\n",
" this.position = [246.0, 293.55555555555554];\n",
" this.rotation = -0.0;\n",
" this.ax = ax1;\n",
" this.text = \"Matplotlib Plot Rendered in D3!\";\n",
"\n",
" this.draw = function(){\n",
"\n",
" this.obj = this.ax.fig.canvas.append(\"text\")\n",
" .attr(\"x\", this.position[0])\n",
" .attr(\"y\", this.ax.fig.height - this.position[1])\n",
"\n",
" .attr(\"transform\", \"rotate(\" + this.rotation + \",\"\n",
" + this.position[0] + \",\"\n",
" + (figheight - this.position[1]) + \")\")\n",
"\n",
"\n",
" .attr(\"class\", \"text\")\n",
" .text(this.text)\n",
" .attr(\"class\", \"text26b839b71fdb44ce8665019008faaae4\")\n",
" .attr(\"style\", \"text-anchor: middle;\");\n",
" }\n",
"\n",
" this.zoomed = function(){\n",
"\n",
" }\n",
"});\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" fig.draw();\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" return fig\n",
" }\n",
"\n",
" // var fig_f17e48980fb84d15aaaa1331972e9acf = create_figf17e48980fb84d15aaaa1331972e9acf();\n",
" // set a timeout of 0: this makes things work in the IPython notebook\n",
" setTimeout(create_figf17e48980fb84d15aaaa1331972e9acf, 0);\n",
" </script>\n",
"\n",
"\n",
"\n"
],
"metadata": {
"png": {
"height": 281,
"width": 383
}
},
"output_type": "display_data",
"png": "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\nsM4ajq71rr1sNkt/fz99ff3MziaZnk4h4sLj
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment