code: function normalizeGroup (data, key) {
    var norm;
    var min = Number.MAX_VALUE;
    var max = -min;
    data.forEach(function (group) {
      if (group.count !== 0) {
        var val = parseFloat(group[key]) || 0;
        if (val !== misval) {
          min = min <= val ? min : val;
          max = max >= val ? max : val;
        }
      }
    });
  
    if (min === Number.MAX_VALUE) {
      // no data, no normalization
      norm = function (v) { return 1; };
    } else if (min < 0 && max > 0) {
      // bubble radius should always be positive,
      // so take abs, and normalize by largest of |min| and max
      min = Math.abs(min);
      max = max < min ? min : max;
      norm = function (v) {
        return Math.abs(v) / max;
      };
    } else if ((max > 0 && min > 0) || (max < 0 && min < 0)) {
      // linear map v from [min, max] to [0,1]
      norm = function (v) {
        return (v - min) / (max - min);
      };
    } else {
      // not sure if ever reached
      norm = function (v) { return 1; };
    }
    return norm;
  }
docs: in pixels