code: function(options, extremes) {
              // if there are no extremes (i.e. no meaningful data was extracted), go with 0 to 100
              if(!extremes.min && !extremes.max) {
                  options.min = 0;
                  options.max = 100;
                  return;
              }
              // if the min or max is such that no data makes it onto the chart, we hard-code some reasonable extremes
              if(extremes.min > extremes.dataMax && extremes.min > 0 && this.userMax === Infinity) {
                  options.max = (this.logScale) ? extremes.min + 2 : extremes.min * 2;
                  return;
              }
              if(extremes.max < extremes.dataMin && extremes.max < 0 && this.userMin === -Infinity) {
                  options.min = (this.logScale) ? extremes.max - 2 : extremes.max * 2;
                  return;
              }
              // if either data extreme is exactly zero, remove the padding on that side so the axis doesn't extend beyond zero
              if(extremes.dataMin === 0 && this.userMin === -Infinity) {
                  options.min = 0;
                  options.minPadding = 0;
              }
              if(extremes.dataMax === 0 && this.userMax === Infinity) {
                  options.max = 0;
                  options.maxPadding = 0;
              }
          }
docs: clean up various issues that can arise from the axis extremes