docs: function () {
              var series = this,
                chart = series.chart,
                options = series.options,
                borderWidth = series.borderWidth = pick(
                  options.borderWidth,
                  series.activePointCount > 0.5 * series.xAxis.len ? 0 : 1
                ),
                yAxis = series.yAxis,
                threshold = options.threshold,
                translatedThreshold = series.translatedThreshold = yAxis.getThreshold(threshold),
                minPointLength = pick(options.minPointLength, 5),
                metrics = series.getColumnMetrics(),
                pointWidth = metrics.width,
                seriesBarW = series.barW = mathMax(pointWidth, 1 + 2 * borderWidth), // postprocessed for border width
                pointXOffset = series.pointXOffset = metrics.offset,
                xCrisp = -(borderWidth % 2 ? 0.5 : 0),
                yCrisp = borderWidth % 2 ? 0.5 : 1;
  
              if (chart.renderer.isVML && chart.inverted) {
                  yCrisp += 1;
              }
  
              // When the pointPadding is 0, we want the columns to be packed tightly, so we allow individual
              // columns to have individual sizes. When pointPadding is greater, we strive for equal-width
              // columns (#2694).
              if (options.pointPadding) {
                  seriesBarW = mathCeil(seriesBarW);
              }
  
              Series.prototype.translate.apply(series);
  
              // Record the new values
              each(series.points, function (point) {
                  var yBottom = pick(point.yBottom, translatedThreshold),
                    plotY = mathMin(mathMax(-999 - yBottom, point.plotY), yAxis.len + 999 + yBottom), // Don't draw too far outside plot area (#1303, #2241)
                    barX = point.plotX + pointXOffset,
                    barW = seriesBarW,
                    barY = mathMin(plotY, yBottom),
                    right,
                    bottom,
                    fromTop,
                    barH = mathMax(plotY, yBottom) - barY;
  
                  // Handle options.minPointLength
                  if (mathAbs(barH) < minPointLength) {
                      if (minPointLength) {
                          barH = minPointLength;
                          barY =
                            mathRound(mathAbs(barY - translatedThreshold) > minPointLength ? // stacked
                            yBottom - minPointLength : // keep position
                            translatedThreshold - (yAxis.translate(point.y, 0, 1, 0, 1) <= translatedThreshold ? minPointLength : 0)); // use exact yAxis.translation (#1485)
                      }
                  }
  
                  // Cache for access in polar
                  point.barX = barX;
                  point.pointWidth = pointWidth;
  
                  // Fix the tooltip on center of grouped columns (#1216, #424)
                  point.tooltipPos = chart.inverted ?
                    [yAxis.len - plotY, series.xAxis.len - barX - barW / 2] :
                    [barX + barW / 2, plotY + yAxis.pos - chart.plotTop];
  
                  // Round off to obtain crisp edges and avoid overlapping with neighbours (#2694)
                  right = mathRound(barX + barW) + xCrisp;
                  barX = mathRound(barX) + xCrisp;
                  barW = right - barX;
  
                  fromTop = mathAbs(barY) < 0.5;
                  bottom = mathRound(barY + barH) + yCrisp;
                  barY = mathRound(barY) + yCrisp;
                  barH = bottom - barY;
  
                  // Top edges are exceptions
                  if (fromTop) {
                      barY -= 1;
                      barH += 1;
                  }
  
                  // Register shape type and arguments to be used in drawPoints
                  point.shapeType = 'rect';
                  point.shapeArgs = {
                      x: barX,
                      y: barY,
                      width: barW,
                      height: barH
                  };
  
              });
  
          }