docs: function fitWithPointLabels(scale) {
  
  	// Right, this is really confusing and there is a lot of maths going on here
  	// The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9
  	//
  	// Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif
  	//
  	// Solution:
  	//
  	// We assume the radius of the polygon is half the size of the canvas at first
  	// at each index we check if the text overlaps.
  	//
  	// Where it does, we store that angle and that index.
  	//
  	// After finding the largest index and angle we calculate how much we need to remove
  	// from the shape radius to move the point inwards by that x.
  	//
  	// We average the left and right distances to get the maximum shape radius that can fit in the box
  	// along with labels.
  	//
  	// Once we have that, we can find the centre point for the chart, by taking the x text protrusion
  	// on each side, removing that from the size, halving it and adding the left x protrusion width.
  	//
  	// This will mean we have a shape fitted to the canvas, as large as it can be with the labels
  	// and position it in the most space efficient manner
  	//
  	// https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif
  
  	var plFont = helpers.options._parseFont(scale.options.pointLabels);
  
  	// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.
  	// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points
  	var furthestLimits = {
  		l: 0,
  		r: scale.width,
  		t: 0,
  		b: scale.height - scale.paddingTop
  	};
  	var furthestAngles = {};
  	var i, textSize, pointPosition;
  
  	scale.ctx.font = plFont.string;
  	scale._pointLabelSizes = [];
  
  	var valueCount = getValueCount(scale);
  	for (i = 0; i < valueCount; i++) {
  		pointPosition = scale.getPointPosition(i, scale.drawingArea + 5);
  		textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i] || '');
  		scale._pointLabelSizes[i] = textSize;
  
  		// Add quarter circle to make degree 0 mean top of circle
  		var angleRadians = scale.getIndexAngle(i);
  		var angle = helpers.toDegrees(angleRadians) % 360;
  		var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
  		var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
  
  		if (hLimits.start < furthestLimits.l) {
  			furthestLimits.l = hLimits.start;
  			furthestAngles.l = angleRadians;
  		}
  
  		if (hLimits.end > furthestLimits.r) {
  			furthestLimits.r = hLimits.end;
  			furthestAngles.r = angleRadians;
  		}
  
  		if (vLimits.start < furthestLimits.t) {
  			furthestLimits.t = vLimits.start;
  			furthestAngles.t = angleRadians;
  		}
  
  		if (vLimits.end > furthestLimits.b) {
  			furthestLimits.b = vLimits.end;
  			furthestAngles.b = angleRadians;
  		}
  	}
  
  	scale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);
  }