docs: function () {
              var series = this,
                chart = series.chart,
                group,
                options = series.options,
                animation = options.animation,
              // Animation doesn't work in IE8 quirks when the group div is hidden,
              // and looks bad in other oldIE
                animDuration = (animation && !!series.animate && chart.renderer.isSVG && pick(animation.duration, 500)) || 0,
                visibility = series.visible ? VISIBLE : HIDDEN,
                zIndex = options.zIndex,
                hasRendered = series.hasRendered,
                chartSeriesGroup = chart.seriesGroup;
  
              // the group
              group = series.plotGroup(
                'group',
                'series',
                visibility,
                zIndex,
                chartSeriesGroup
              );
  
              series.markerGroup = series.plotGroup(
                'markerGroup',
                'markers',
                visibility,
                zIndex,
                chartSeriesGroup
              );
  
              // initiate the animation
              if (animDuration) {
                  series.animate(true);
              }
  
              // cache attributes for shapes
              series.getAttribs();
  
              // SVGRenderer needs to know this before drawing elements (#1089, #1795)
              group.inverted = series.isCartesian ? chart.inverted : false;
  
              // draw the graph if any
              if (series.drawGraph) {
                  series.drawGraph();
                  series.clipNeg();
              }
  
              each(series.points, function (point) {
                  if (point.redraw) {
                      point.redraw();
                  }
              });
  
              // draw the data labels (inn pies they go before the points)
              if (series.drawDataLabels) {
                  series.drawDataLabels();
              }
  
              // draw the points
              if (series.visible) {
                  series.drawPoints();
              }
  
  
              // draw the mouse tracking area
              if (series.drawTracker && series.options.enableMouseTracking !== false) {
                  series.drawTracker();
              }
  
              // Handle inverted series and tracker groups
              if (chart.inverted) {
                  series.invertGroups();
              }
  
              // Initial clipping, must be defined after inverting groups for VML
              if (options.clip !== false && !series.sharedClipKey && !hasRendered) {
                  group.clip(chart.clipRect);
              }
  
              // Run the animation
              if (animDuration) {
                  series.animate();
              }
  
              // Call the afterAnimate function on animation complete (but don't overwrite the animation.complete option
              // which should be available to the user).
              if (!hasRendered) {
                  if (animDuration) {
                      series.animationTimeout = setTimeout(function () {
                          series.afterAnimate();
                      }, animDuration);
                  } else {
                      series.afterAnimate();
                  }
              }
  
              series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see
              // (See #322) series.isDirty = series.isDirtyData = false; // means data is in accordance with what you see
              series.hasRendered = true;
          }