function Histogram() {
	var options;
	var nargs;
	var keys;
	var opts;
	var key;
	var i;

	nargs = arguments.length;
	if ( !(this instanceof Histogram) ) {
		if ( nargs === 0 ) {
			return new Histogram();
		}
		if ( nargs === 1 ) {
			return new Histogram( arguments[0] );
		}
		if ( nargs === 2 ) {
			return new Histogram( arguments[0], arguments[1] );
		}
		return new Histogram( arguments[0], arguments[1], arguments[2] );
	}
	opts = defaults();
	if ( nargs === 0 ) {
		options = {};
	} else if ( nargs === 1 ) {
		options = arguments[ 0 ];
		if ( !isObject( options ) ) {
			throw new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
		}
	} else if ( nargs === 2 ) {
		options = {};
		options.x = arguments[ 0 ];
		options.bins = arguments[ 1 ];
	} else if ( nargs > 2 ) {
		if ( !isObject( arguments[ 2 ] ) ) {
			throw new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', arguments[2] ) );
		}
		options = copy( arguments[ 2 ] ); // avoid mutation
		options.x = arguments[ 0 ];
		options.bins = arguments[ 1 ];
	}
	opts = merge( opts, options );

	debug( 'Creating an instance with the following configuration: %s.', JSON.stringify( opts ) );
	Plot.call( this, opts );

	for ( i = 0; i < PRIVATE_PROPS.length; i++ ) {
		defineProperty( this, PRIVATE_PROPS[i], {
			'configurable': false,
			'enumerable': false,
			'writable': true,
			'value': null
		});
	}

	// Set options...
	keys = objectKeys( opts );
	for ( i = 0; i < keys.length; i++ ) {
		key = keys[ i ];
		this[ key ] = opts[ key ];
	}

	return this;
}
Histogram constructor.

@constructor
@param {Array} [x] - values to bin
@param {Array} [bins] - edges and/or number of bins
@param {Options} [options] - constructor options
@param {boolean} [options.autoRender=false] - indicates whether to re-render on a change event
@param {boolean} [options.autoView=false] - indicates whether to generate an updated view on a render event
@param {(string|StringArray)} [options.barColors='category10'] - bar face color(s)
@param {(number|NumberArray)} [options.barOpacity=0.9] - bar face opacity
@param {(null|string|Array)} [options.binMethod=null] - binning algorithm
@param {Array} [options.bins=[]] - edges and/or number of bins
@param {(null|number|NumberArray)} [options.binWidth=null] - bin width
@param {string} [options.description=''] - description
@param {(null|number|Array)} [options.edgeMax=null] - maximum bin edge value
@param {(null|number|Array)} [options.edgeMin=null] - minimum bin edge value
@param {Array} [options.edges] - bin edges
@param {string} [options.engine='svg'] - render engine
@param {PositiveNumber} [options.height=400] - plot height
@param {Function} [options.isDefined] - accessor indicating whether a datum is defined
@param {(StringArray|EmptyArray)} [options.labels] - data labels
@param {(string|StringArray)} [options.lineColors='#000'] - line color(s)
@param {(number|NumberArray)} [options.lineOpacity=0.9] - line opacity
@param {(string|StringArray)} [options.lineStyle='-'] - line style(s)
@param {(NonNegativeInteger|Array<NonNegativeInteger>)} [options.lineWidth=2] - line width(s)
@param {(null|number|Array)} [options.nbins] - number of bins
@param {(string|StringArray)} [options.normalization='count'] - histogram normalization
@param {string} [options.orientation='vertical'] - histogram orientation
@param {NonNegativeInteger} [options.paddingBottom=80] - bottom padding
@param {NonNegativeInteger} [options.paddingLeft=90] - left padding
@param {NonNegativeInteger} [options.paddingRight=20] - right padding
@param {NonNegativeInteger} [options.paddingTop=80] - top padding
@param {string} [options.renderFormat='vdom'] - render format
@param {string} [options.title=''] - title
@param {string} [options.viewer='none'] - viewer
@param {PositiveNumber} [options.width=400] - plot width
@param {Array} [options.x=[]] - values to bin
@param {string} [options.xAxisOrient='bottom'] - x-axis orientation
@param {string} [options.xLabel='x'] - x-axis label
@param {(Date|FiniteNumber|null)} [options.xMax=null] - maximum value of x-axis domain
@param {(Date|FiniteNumber|null)} [options.xMin=null] - minimum value of x-axis domain
@param {(NonNegativeInteger|null)} [options.xNumTicks=5] - number of x-axis tick marks
@param {(string|null)} [options.xTickFormat=null] - x-axis tick format
@param {string} [options.yAxisOrient='left'] - y-axis orientation
@param {(null|string)} [options.yLabel=null] - y-axis label
@param {(FiniteNumber|null)} [options.yMax=null] - maximum value of y-axis domain
@param {(FiniteNumber|null)} [options.yMin=null] - minimum value of y-axis domain
@param {(NonNegativeInteger|null)} [options.yNumTicks=5] - number of y-axis tick marks
@param {(string|null)} [options.yTickFormat=null] - y-axis tick format
@throws {TypeError} must provide valid options
@returns {Histogram} Histogram instance

@example
var hist = new Histogram();