function handleLabelsAndValues(labels, values) {
        var hasLabels = Lib.isArrayOrTypedArray(labels);
        var hasValues = Lib.isArrayOrTypedArray(values);
        var len = Math.min(
          hasLabels ? labels.length : Infinity,
          hasValues ? values.length : Infinity
        );
        if (!isFinite(len)) len = 0;
        if (len && hasValues) {
          var hasPositive;
          for (var i = 0; i < len; i++) {
            var v = values[i];
            if (isNumeric(v) && v > 0) {
              hasPositive = true;
              break;
            }
          }
          if (!hasPositive) len = 0;
        }
        return {
          hasLabels,
          hasValues,
          len
        };
      }
there are two common conventions, both of which place the first
(largest, if sorted) slice with its left edge at 12 o'clock but
succeeding slices follow either cw or ccw from there.

see http://visage.co/data-visualization-101-pie-charts/