docs: function () {
  		var series = this,
  			options = series.options,
  			yAxis = series.yAxis,
  			len,
  			i,
  			points,
  			point,
  			shapeArgs,
  			stack,
  			y,
  			yValue,
  			previousY,
  			previousIntermediate,
  			range,
  			threshold = options.threshold,
  			stacking = options.stacking,
  			tooltipY;
  
  		// run column series translate
  		seriesTypes.column.prototype.translate.apply(this);
  
  		previousY = previousIntermediate = threshold;
  		points = series.points;
  
  		for (i = 0, len = points.length; i < len; i++) {
  			// cache current point object
  			point = points[i];
  			yValue = this.processedYData[i];
  			shapeArgs = point.shapeArgs;
  
  			// get current stack
  			stack = stacking && yAxis.stacks[(series.negStacks && yValue < threshold ? '-' : '') + series.stackKey];
  			range = stack ? 
  				stack[point.x].points[series.index + ',' + i] :
  				[0, yValue];
  
  			// override point value for sums
  			// #3710 Update point does not propagate to sum
  			if (point.isSum) {
  				point.y = yValue;
  			} else if (point.isIntermediateSum) {
  				point.y = yValue - previousIntermediate; // #3840
  			}
  			// up points
  			y = mathMax(previousY, previousY + point.y) + range[0];
  			shapeArgs.y = yAxis.translate(y, 0, 1);
  
  
  			// sum points
  			if (point.isSum) {
  				shapeArgs.y = yAxis.translate(range[1], 0, 1);
  				shapeArgs.height = yAxis.translate(range[0], 0, 1) - shapeArgs.y;
  
  			} else if (point.isIntermediateSum) {
  				shapeArgs.y = yAxis.translate(range[1], 0, 1);
  				shapeArgs.height = yAxis.translate(previousIntermediate, 0, 1) - shapeArgs.y;
  				previousIntermediate = range[1];
  
  			// If it's not the sum point, update previous stack end position and get 
  			// shape height (#3886)
  			} else {
  				if (previousY !== 0) { // Not the first point
  					shapeArgs.height = yValue > 0 ? 
  						yAxis.translate(previousY, 0, 1) - shapeArgs.y :
  						yAxis.translate(previousY, 0, 1) - yAxis.translate(previousY - yValue, 0, 1);
  				}
  				previousY += yValue;
  			}
  			// #3952 Negative sum or intermediate sum not rendered correctly
  			if (shapeArgs.height < 0) {
  				shapeArgs.y += shapeArgs.height;
  				shapeArgs.height *= -1;
  			}
  
  			point.plotY = shapeArgs.y = mathRound(shapeArgs.y) - (series.borderWidth % 2) / 2;
  			shapeArgs.height = mathMax(mathRound(shapeArgs.height), 0.001); // #3151
  			point.yBottom = shapeArgs.y + shapeArgs.height;
  
  			// Correct tooltip placement (#3014)
  			tooltipY = point.plotY + (point.negative ? shapeArgs.height : 0);
  			if (series.chart.inverted) {
  				point.tooltipPos[0] = yAxis.len - tooltipY;
  			} else {
  				point.tooltipPos[1] = tooltipY;
  			}
  
  		}
  	}