Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@aflaxman
Created February 9, 2014 18:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aflaxman/8903991 to your computer and use it in GitHub Desktop.
Save aflaxman/8903991 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"!date"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Sun Feb 9 10:37:29 PST 2014\r\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"import numpy as np, matplotlib.pyplot as plt, mpld3\n",
"from mpld3 import plugins\n",
"mpld3.enable_notebook(\"//cdnjs.cloudflare.com/ajax/libs/d3/3.4.1/d3.min.js\")"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig = plt.figure()\n",
"fig.subplots_adjust(hspace=0.4, wspace=0.4)\n",
"\n",
"ax1 = fig.add_subplot(2, 2, 1)\n",
"ax2 = fig.add_subplot(2, 2, 2, sharey=ax1, xscale='log')\n",
"ax3 = fig.add_subplot(2, 2, 3, sharex=ax1, yscale='log')\n",
"ax4 = fig.add_subplot(2, 2, 4, sharex=ax2, sharey=ax3)\n",
"\n",
"x = np.linspace(1, 1e2)\n",
"y = x ** 2\n",
"\n",
"for ax in [ax1, ax2, ax3, ax4]:\n",
" ax.plot(x, y)\n",
"\n",
"plugins.connect(fig, plugins.ResetButton())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" <style>\n",
"\n",
"\n",
" div#figure200e804866434f2f8aefa8c2d2eebc58\n",
" .axesbg{\n",
" fill: #FFFFFF;\n",
" }\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\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#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\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#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axes1\n",
"path.line3 {\n",
" stroke: #0000FF;\n",
" stroke-width: 1.0;\n",
" stroke-dasharray: 10,0;\n",
" fill: none;\n",
" stroke-opacity: 1;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axes1\n",
"path.points3 {\n",
" stroke-width: 0.5;\n",
" stroke: #0000FF;\n",
" fill: #0000FF;\n",
" fill-opacity: 1;\n",
" stroke-opacity: 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.textdfadea5cf9914253a3dd0c3f273bbf93 {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.text05f516d2c73d4e85a9c1c61ba75d3172 {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.text63a3f1e85185427bb4e0a3b554baaa78 {\n",
" font-size : 12.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" div#figure200e804866434f2f8aefa8c2d2eebc58\n",
" .axesbg{\n",
" fill: #FFFFFF;\n",
" }\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\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#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\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#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axes2\n",
"path.line3 {\n",
" stroke: #0000FF;\n",
" stroke-width: 1.0;\n",
" stroke-dasharray: 10,0;\n",
" fill: none;\n",
" stroke-opacity: 1;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axes2\n",
"path.points3 {\n",
" stroke-width: 0.5;\n",
" stroke: #0000FF;\n",
" fill: #0000FF;\n",
" fill-opacity: 1;\n",
" stroke-opacity: 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.text3e46e6b8f5994c4b99ff500ef2d961d5 {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.text0e43e4f40231403b89bb0f9baf1e11d4 {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.text9422e27fc6f143148903eba23f8ba897 {\n",
" font-size : 12.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" div#figure200e804866434f2f8aefa8c2d2eebc58\n",
" .axesbg{\n",
" fill: #FFFFFF;\n",
" }\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\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#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\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#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axes3\n",
"path.line3 {\n",
" stroke: #0000FF;\n",
" stroke-width: 1.0;\n",
" stroke-dasharray: 10,0;\n",
" fill: none;\n",
" stroke-opacity: 1;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axes3\n",
"path.points3 {\n",
" stroke-width: 0.5;\n",
" stroke: #0000FF;\n",
" fill: #0000FF;\n",
" fill-opacity: 1;\n",
" stroke-opacity: 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.textef29da40133f428bab77be30d159352d {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.textdd2520c43a8341d3988b28fff0638d74 {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.textaa5d00bc84e44c11b56304319f934629 {\n",
" font-size : 12.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" div#figure200e804866434f2f8aefa8c2d2eebc58\n",
" .axesbg{\n",
" fill: #FFFFFF;\n",
" }\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\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#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axis line, .axis path {\n",
" shape-rendering: crispEdges;\n",
" stroke: black;\n",
" fill: none;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\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#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axes4\n",
"path.line3 {\n",
" stroke: #0000FF;\n",
" stroke-width: 1.0;\n",
" stroke-dasharray: 10,0;\n",
" fill: none;\n",
" stroke-opacity: 1;\n",
"}\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
".axes4\n",
"path.points3 {\n",
" stroke-width: 0.5;\n",
" stroke: #0000FF;\n",
" fill: #0000FF;\n",
" fill-opacity: 1;\n",
" stroke-opacity: 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.textb76b502659cf4791a99340df481fb301 {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.textb1f38d90ef2542d9bc36a347a54cd336 {\n",
" font-size : 10.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"div#figure200e804866434f2f8aefa8c2d2eebc58\n",
"text.text4795af20d24c4fbc903a60331e65abc9 {\n",
" font-size : 12.0px;\n",
" fill : #000000;\n",
" opacity : 1;\n",
"}\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" </style>\n",
"\n",
"\n",
"\n",
" <div id='figure200e804866434f2f8aefa8c2d2eebc58'>\n",
" </div>\n",
" <script type=\"text/javascript\">\n",
" var create_fig200e804866434f2f8aefa8c2d2eebc58 = function(d3, undefined){\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",
" var canvas = this.fig.canvas;\n",
" canvas\n",
" .on(\"mousedown.cursor\", function () { canvas.attr(\"style\", \"cursor:move\"); })\n",
" .on(\"mouseup.cursor\", function () { canvas.attr(\"style\", \"cursor:auto\"); });\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",
" var figwidth = 6.0 * 80;\n",
" var figheight = 4.0 * 80;\n",
" var fig = new Figure(\"div#figure200e804866434f2f8aefa8c2d2eebc58\",\n",
" figwidth, figheight);\n",
"\n",
"\n",
"\n",
" var ax1 = new Axes(fig, [0.125, 0.57708333333333339, 0.32291666666666669, 0.32291666666666663], [0.0, 100.0], [0.0, 10000.0],\n",
" \"linear\", \"linear\",\n",
" [0.0, 100.0], [0.0, 10000.0],\n",
" false, false,\n",
" \"axes1\",\n",
" \"clip200e804866434f2f8aefa8c2d2eebc581\", true);\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax1.add_element(new Axis(ax1, \"bottom\",\n",
" 6, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax1.add_element(new Axis(ax1, \"left\",\n",
" 6, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add a Line2D element\n",
"var line75f3e7b4f8b3411396f2bad9195c1daf = new function(){\n",
" this.data = [[1.0, 1.0], [3.020408163265306, 9.122865472719699], [5.040816326530612, 25.409829237817572], [7.061224489795918, 49.86089129529362], [9.081632653061224, 82.47605164514783], [11.102040816326529, 123.25531028738021], [13.122448979591836, 172.1986672219908], [15.142857142857142, 229.30612244897958], [17.163265306122447, 294.57767596834645], [19.183673469387752, 368.0133277800915], [21.204081632653057, 449.61307788421476], [23.224489795918366, 539.3769262807164], [25.24489795918367, 637.3048729695959], [27.265306122448976, 743.3969179508537], [29.285714285714285, 857.6530612244898], [31.30612244897959, 980.0733027905038], [33.326530612244895, 1110.6576426488962], [35.3469387755102, 1249.4060807996668], [37.367346938775505, 1396.318617242815], [39.38775510204081, 1551.3952519783422], [41.408163265306115, 1714.6359850062468], [43.42857142857142, 1886.0408163265301], [45.44897959183673, 2065.6097459391917], [47.469387755102034, 2253.342773844231], [49.48979591836734, 2449.239900041649], [51.51020408163265, 2653.301124531445], [53.53061224489795, 2865.5264473136185], [55.55102040816326, 3085.915868388171], [57.57142857142857, 3314.4693877551017], [59.59183673469387, 3551.1870054144097], [61.61224489795918, 3796.0687213660967], [63.63265306122448, 4049.1145356101615], [65.65306122448979, 4310.3244481466045], [67.67346938775509, 4579.698458975426], [69.6938775510204, 4857.236568096626], [71.71428571428571, 5142.938775510203], [73.73469387755101, 5436.805081216158], [75.75510204081633, 5738.835485214494], [77.77551020408163, 6049.029987505205], [79.79591836734693, 6367.3885880882945], [81.81632653061223, 6693.911286963763], [83.83673469387755, 7028.598084131611], [85.85714285714285, 7371.448979591835], [87.87755102040815, 7722.463973344437], [89.89795918367346, 8081.64306538942], [91.91836734693877, 8448.986255726779], [93.93877551020407, 8824.493544356515], [95.95918367346938, 9208.164931278632], [97.97959183673468, 9600.000416493125], [100.0, 10000.0]];\n",
" this.ax = ax1;\n",
"\n",
" this.translate = function(d)\n",
" { return \"translate(\" + this.ax.x(d[0]) + \",\"\n",
" + this.ax.y(d[1]) + \")\"; };\n",
"\n",
" this.draw = function(){\n",
"\n",
" this.line = d3.svg.line()\n",
" .x(function(d) {return this.ax.x(d[0]);})\n",
" .y(function(d) {return this.ax.y(d[1]);})\n",
" .interpolate(\"linear\")\n",
" .defined(function (d) {return !isNaN(d[0]) && !isNaN(d[1]); });\n",
"\n",
" this.lineobj = this.ax.axes.append(\"svg:path\")\n",
" .attr(\"d\", this.line(this.data))\n",
" .attr('class', 'line3');\n",
"\n",
"\n",
" };\n",
"\n",
" this.zoomed = function(){\n",
"\n",
"\n",
" this.lineobj.attr(\"d\", this.line(this.data));\n",
"\n",
"\n",
"\n",
" }\n",
"};\n",
"\n",
"ax1.add_element(line75f3e7b4f8b3411396f2bad9195c1daf);\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" var ax2 = new Axes(fig, [0.57708333333333339, 0.57708333333333339, 0.32291666666666674, 0.32291666666666663], [1.0, 100.0], [0.0, 10000.0],\n",
" \"log\", \"linear\",\n",
" [1.0, 100.0], [0.0, 10000.0],\n",
" false, false,\n",
" \"axes2\",\n",
" \"clip200e804866434f2f8aefa8c2d2eebc582\", true);\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax2.add_element(new Axis(ax2, \"bottom\",\n",
" 5, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax2.add_element(new Axis(ax2, \"left\",\n",
" 6, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add a Line2D element\n",
"var linee736218b46a7404182e24e5a9435a8f7 = new function(){\n",
" this.data = [[1.0, 1.0], [3.020408163265306, 9.122865472719699], [5.040816326530612, 25.409829237817572], [7.061224489795918, 49.86089129529362], [9.081632653061224, 82.47605164514783], [11.102040816326529, 123.25531028738021], [13.122448979591836, 172.1986672219908], [15.142857142857142, 229.30612244897958], [17.163265306122447, 294.57767596834645], [19.183673469387752, 368.0133277800915], [21.204081632653057, 449.61307788421476], [23.224489795918366, 539.3769262807164], [25.24489795918367, 637.3048729695959], [27.265306122448976, 743.3969179508537], [29.285714285714285, 857.6530612244898], [31.30612244897959, 980.0733027905038], [33.326530612244895, 1110.6576426488962], [35.3469387755102, 1249.4060807996668], [37.367346938775505, 1396.318617242815], [39.38775510204081, 1551.3952519783422], [41.408163265306115, 1714.6359850062468], [43.42857142857142, 1886.0408163265301], [45.44897959183673, 2065.6097459391917], [47.469387755102034, 2253.342773844231], [49.48979591836734, 2449.239900041649], [51.51020408163265, 2653.301124531445], [53.53061224489795, 2865.5264473136185], [55.55102040816326, 3085.915868388171], [57.57142857142857, 3314.4693877551017], [59.59183673469387, 3551.1870054144097], [61.61224489795918, 3796.0687213660967], [63.63265306122448, 4049.1145356101615], [65.65306122448979, 4310.3244481466045], [67.67346938775509, 4579.698458975426], [69.6938775510204, 4857.236568096626], [71.71428571428571, 5142.938775510203], [73.73469387755101, 5436.805081216158], [75.75510204081633, 5738.835485214494], [77.77551020408163, 6049.029987505205], [79.79591836734693, 6367.3885880882945], [81.81632653061223, 6693.911286963763], [83.83673469387755, 7028.598084131611], [85.85714285714285, 7371.448979591835], [87.87755102040815, 7722.463973344437], [89.89795918367346, 8081.64306538942], [91.91836734693877, 8448.986255726779], [93.93877551020407, 8824.493544356515], [95.95918367346938, 9208.164931278632], [97.97959183673468, 9600.000416493125], [100.0, 10000.0]];\n",
" this.ax = ax2;\n",
"\n",
" this.translate = function(d)\n",
" { return \"translate(\" + this.ax.x(d[0]) + \",\"\n",
" + this.ax.y(d[1]) + \")\"; };\n",
"\n",
" this.draw = function(){\n",
"\n",
" this.line = d3.svg.line()\n",
" .x(function(d) {return this.ax.x(d[0]);})\n",
" .y(function(d) {return this.ax.y(d[1]);})\n",
" .interpolate(\"linear\")\n",
" .defined(function (d) {return !isNaN(d[0]) && !isNaN(d[1]); });\n",
"\n",
" this.lineobj = this.ax.axes.append(\"svg:path\")\n",
" .attr(\"d\", this.line(this.data))\n",
" .attr('class', 'line3');\n",
"\n",
"\n",
" };\n",
"\n",
" this.zoomed = function(){\n",
"\n",
"\n",
" this.lineobj.attr(\"d\", this.line(this.data));\n",
"\n",
"\n",
"\n",
" }\n",
"};\n",
"\n",
"ax2.add_element(linee736218b46a7404182e24e5a9435a8f7);\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" var ax3 = new Axes(fig, [0.125, 0.12499999999999989, 0.32291666666666669, 0.32291666666666674], [0.0, 100.0], [1.0, 10000.0],\n",
" \"linear\", \"log\",\n",
" [0.0, 100.0], [1.0, 10000.0],\n",
" false, false,\n",
" \"axes3\",\n",
" \"clip200e804866434f2f8aefa8c2d2eebc583\", true);\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax3.add_element(new Axis(ax3, \"bottom\",\n",
" 6, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax3.add_element(new Axis(ax3, \"left\",\n",
" 7, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add a Line2D element\n",
"var line02d8b2e024154e729f101eb2987dcea7 = new function(){\n",
" this.data = [[1.0, 1.0], [3.020408163265306, 9.122865472719699], [5.040816326530612, 25.409829237817572], [7.061224489795918, 49.86089129529362], [9.081632653061224, 82.47605164514783], [11.102040816326529, 123.25531028738021], [13.122448979591836, 172.1986672219908], [15.142857142857142, 229.30612244897958], [17.163265306122447, 294.57767596834645], [19.183673469387752, 368.0133277800915], [21.204081632653057, 449.61307788421476], [23.224489795918366, 539.3769262807164], [25.24489795918367, 637.3048729695959], [27.265306122448976, 743.3969179508537], [29.285714285714285, 857.6530612244898], [31.30612244897959, 980.0733027905038], [33.326530612244895, 1110.6576426488962], [35.3469387755102, 1249.4060807996668], [37.367346938775505, 1396.318617242815], [39.38775510204081, 1551.3952519783422], [41.408163265306115, 1714.6359850062468], [43.42857142857142, 1886.0408163265301], [45.44897959183673, 2065.6097459391917], [47.469387755102034, 2253.342773844231], [49.48979591836734, 2449.239900041649], [51.51020408163265, 2653.301124531445], [53.53061224489795, 2865.5264473136185], [55.55102040816326, 3085.915868388171], [57.57142857142857, 3314.4693877551017], [59.59183673469387, 3551.1870054144097], [61.61224489795918, 3796.0687213660967], [63.63265306122448, 4049.1145356101615], [65.65306122448979, 4310.3244481466045], [67.67346938775509, 4579.698458975426], [69.6938775510204, 4857.236568096626], [71.71428571428571, 5142.938775510203], [73.73469387755101, 5436.805081216158], [75.75510204081633, 5738.835485214494], [77.77551020408163, 6049.029987505205], [79.79591836734693, 6367.3885880882945], [81.81632653061223, 6693.911286963763], [83.83673469387755, 7028.598084131611], [85.85714285714285, 7371.448979591835], [87.87755102040815, 7722.463973344437], [89.89795918367346, 8081.64306538942], [91.91836734693877, 8448.986255726779], [93.93877551020407, 8824.493544356515], [95.95918367346938, 9208.164931278632], [97.97959183673468, 9600.000416493125], [100.0, 10000.0]];\n",
" this.ax = ax3;\n",
"\n",
" this.translate = function(d)\n",
" { return \"translate(\" + this.ax.x(d[0]) + \",\"\n",
" + this.ax.y(d[1]) + \")\"; };\n",
"\n",
" this.draw = function(){\n",
"\n",
" this.line = d3.svg.line()\n",
" .x(function(d) {return this.ax.x(d[0]);})\n",
" .y(function(d) {return this.ax.y(d[1]);})\n",
" .interpolate(\"linear\")\n",
" .defined(function (d) {return !isNaN(d[0]) && !isNaN(d[1]); });\n",
"\n",
" this.lineobj = this.ax.axes.append(\"svg:path\")\n",
" .attr(\"d\", this.line(this.data))\n",
" .attr('class', 'line3');\n",
"\n",
"\n",
" };\n",
"\n",
" this.zoomed = function(){\n",
"\n",
"\n",
" this.lineobj.attr(\"d\", this.line(this.data));\n",
"\n",
"\n",
"\n",
" }\n",
"};\n",
"\n",
"ax3.add_element(line02d8b2e024154e729f101eb2987dcea7);\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" var ax4 = new Axes(fig, [0.57708333333333339, 0.12499999999999989, 0.32291666666666674, 0.32291666666666674], [1.0, 100.0], [1.0, 10000.0],\n",
" \"log\", \"log\",\n",
" [1.0, 100.0], [1.0, 10000.0],\n",
" false, false,\n",
" \"axes4\",\n",
" \"clip200e804866434f2f8aefa8c2d2eebc584\", true);\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax4.add_element(new Axis(ax4, \"bottom\",\n",
" 5, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add an Axis element\n",
"ax4.add_element(new Axis(ax4, \"left\",\n",
" 7, null,\n",
" null));\n",
"\n",
"\n",
"\n",
"// Add a Line2D element\n",
"var line8dbc037f1a45490d9b5b21cfa0b55bda = new function(){\n",
" this.data = [[1.0, 1.0], [3.020408163265306, 9.122865472719699], [5.040816326530612, 25.409829237817572], [7.061224489795918, 49.86089129529362], [9.081632653061224, 82.47605164514783], [11.102040816326529, 123.25531028738021], [13.122448979591836, 172.1986672219908], [15.142857142857142, 229.30612244897958], [17.163265306122447, 294.57767596834645], [19.183673469387752, 368.0133277800915], [21.204081632653057, 449.61307788421476], [23.224489795918366, 539.3769262807164], [25.24489795918367, 637.3048729695959], [27.265306122448976, 743.3969179508537], [29.285714285714285, 857.6530612244898], [31.30612244897959, 980.0733027905038], [33.326530612244895, 1110.6576426488962], [35.3469387755102, 1249.4060807996668], [37.367346938775505, 1396.318617242815], [39.38775510204081, 1551.3952519783422], [41.408163265306115, 1714.6359850062468], [43.42857142857142, 1886.0408163265301], [45.44897959183673, 2065.6097459391917], [47.469387755102034, 2253.342773844231], [49.48979591836734, 2449.239900041649], [51.51020408163265, 2653.301124531445], [53.53061224489795, 2865.5264473136185], [55.55102040816326, 3085.915868388171], [57.57142857142857, 3314.4693877551017], [59.59183673469387, 3551.1870054144097], [61.61224489795918, 3796.0687213660967], [63.63265306122448, 4049.1145356101615], [65.65306122448979, 4310.3244481466045], [67.67346938775509, 4579.698458975426], [69.6938775510204, 4857.236568096626], [71.71428571428571, 5142.938775510203], [73.73469387755101, 5436.805081216158], [75.75510204081633, 5738.835485214494], [77.77551020408163, 6049.029987505205], [79.79591836734693, 6367.3885880882945], [81.81632653061223, 6693.911286963763], [83.83673469387755, 7028.598084131611], [85.85714285714285, 7371.448979591835], [87.87755102040815, 7722.463973344437], [89.89795918367346, 8081.64306538942], [91.91836734693877, 8448.986255726779], [93.93877551020407, 8824.493544356515], [95.95918367346938, 9208.164931278632], [97.97959183673468, 9600.000416493125], [100.0, 10000.0]];\n",
" this.ax = ax4;\n",
"\n",
" this.translate = function(d)\n",
" { return \"translate(\" + this.ax.x(d[0]) + \",\"\n",
" + this.ax.y(d[1]) + \")\"; };\n",
"\n",
" this.draw = function(){\n",
"\n",
" this.line = d3.svg.line()\n",
" .x(function(d) {return this.ax.x(d[0]);})\n",
" .y(function(d) {return this.ax.y(d[1]);})\n",
" .interpolate(\"linear\")\n",
" .defined(function (d) {return !isNaN(d[0]) && !isNaN(d[1]); });\n",
"\n",
" this.lineobj = this.ax.axes.append(\"svg:path\")\n",
" .attr(\"d\", this.line(this.data))\n",
" .attr('class', 'line3');\n",
"\n",
"\n",
" };\n",
"\n",
" this.zoomed = function(){\n",
"\n",
"\n",
" this.lineobj.attr(\"d\", this.line(this.data));\n",
"\n",
"\n",
"\n",
" }\n",
"};\n",
"\n",
"ax4.add_element(line8dbc037f1a45490d9b5b21cfa0b55bda);\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" ax1.sharex = [ax3];\n",
"\n",
"\n",
" ax1.sharey = [ax2];\n",
"\n",
"\n",
"\n",
" ax2.sharex = [ax4];\n",
"\n",
"\n",
" ax2.sharey = [ax1];\n",
"\n",
"\n",
"\n",
" ax3.sharex = [ax1];\n",
"\n",
"\n",
" ax3.sharey = [ax4];\n",
"\n",
"\n",
"\n",
" ax4.sharex = [ax2];\n",
"\n",
"\n",
" ax4.sharey = [ax3];\n",
"\n",
"\n",
"\n",
" fig.draw();\n",
"\n",
"\n",
" fig.root.append(\"div\")\n",
" .append(\"button\")\n",
" .text(\"Reset\")\n",
" .on(\"click\", fig.reset.bind(fig));\n",
"\n",
"\n",
" return fig\n",
" }\n",
"\n",
" // set a timeout of 0: this makes things work in the IPython notebook\n",
" setTimeout(function(){\n",
" // we need to call the function, making sure d3 is defined appropriately\n",
" if(typeof define === \"function\" && define.amd){\n",
" // If require.js is available, use it to load d3\n",
" require.config({paths: {d3: \"//cdnjs.cloudflare.com/ajax/libs/d3/3.4.1/d3.min\"}});\n",
" require([\"d3\"], create_fig200e804866434f2f8aefa8c2d2eebc58);\n",
" }else if(typeof d3 === \"undefined\"){\n",
" // No require.js: dynamically load d3\n",
" var s = document.createElement('script');\n",
" s.src = \"//cdnjs.cloudflare.com/ajax/libs/d3/3.4.1/d3.min.js\";\n",
" s.async = true;\n",
" s.onreadystatechange = s.onload = s.onerror = function() {\n",
" if(typeof d3 === \"undefined\"){\n",
" document.getElementById(\"figure200e804866434f2f8aefa8c2d2eebc58\").innerHTML =\n",
" \"<p style='color:red;'>(d3 failed to load)</p>\";\n",
" }else{\n",
" create_fig200e804866434f2f8aefa8c2d2eebc58(d3);\n",
" }\n",
" };\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" }else{\n",
" // d3 is already globally loaded\n",
" create_fig200e804866434f2f8aefa8c2d2eebc58(d3);\n",
" }\n",
" }, 0);\n",
"\n",
" </script>\n",
"\n",
"\n",
"\n"
],
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x60aee90>"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment