docs: function Graph( canvas ) {
  
  	// INSTANCE ATTRIBUTES //
  
  	this._parent = canvas;
  	this._root = undefined;
  	this._children = {};
  
  	this._config = {
  		"height": 400,
  		"width": 600,
  		"position": {
  			"top": 80,
  			"left": 90
  		},
  		"background": false,
  		"scales": [
  			{
  				"name": "x",
  				"type": "linear",
  				"domain": {
  					"min": 0,
  					"max": 1
  				},
  				"range": {
  					"min": 0,
  					"max": 600
  				}
  			},
  			{
  				"name": "y",
  				"type": "linear",
  				"domain": {
  					"min": 0,
  					"max": 1
  				},
  				"range": {
  					"min": 0,
  					"max": 400
  				}
  			},
  			{
  				"name": "z",
  				"type": "linear",
  				"domain": {
  					"min": 0,
  					"max": 1
  				},
  				"range": {
  					"min": 0,
  					"max": 1
  				}
  			}
  		]
  	};
  
  	// DATA //
  	this._data = null;
  
  	// SCALES //
  	this._xScale = d3.scale.linear()
  		.domain([
  			this._config.scales[ 0 ].domain.min,
  			this._config.scales[ 0 ].domain.max
  		])
  		.range([
  			this._config.scales[ 0 ].range.min,
  			this._config.scales[ 0 ].range.max
  		]);
  	this._yScale = d3.scale.linear()
  		.domain([
  			this._config.scales[ 1 ].domain.min,
  			this._config.scales[ 1 ].domain.max
  		])
  		.range([
  			this._config.scales[ 1 ].range.max,
  			this._config.scales[ 1 ].range.min
  		]);
  	this._zScale = d3.scale.linear()
  		.domain([
  			this._config.scales[ 2 ].domain.min,
  			this._config.scales[ 2 ].domain.max
  		])
  		.range([
  			this._config.scales[ 2 ].range.min,
  			this._config.scales[ 2 ].range.max
  		]);
  
  	// REGISTER //
  	if ( canvas._config.hasOwnProperty( 'graph' ) ) {
  		canvas._config.graph.push( this._config );
  	} else {
  		canvas._config.graph = [ this._config ];
  	}
  	if ( canvas._children.hasOwnProperty( 'graph' ) ) {
  		canvas._children.graph.push( this );
  	} else {
  		canvas._children.graph = [ this ];
  	}
  
  	return this;
  }