docs: function fixOnBandTicksCoords(axis, ticksCoords, tickCategoryInterval, alignWithLabel, clamp) {
      var ticksLen = ticksCoords.length;
  
      if (!axis.onBand || alignWithLabel || !ticksLen) {
          return;
      }
  
      var axisExtent = axis.getExtent();
      var last;
      if (ticksLen === 1) {
          ticksCoords[0].coord = axisExtent[0];
          last = ticksCoords[1] = {coord: axisExtent[0]};
      }
      else {
          var shift = (ticksCoords[1].coord - ticksCoords[0].coord);
          each(ticksCoords, function (ticksItem) {
              ticksItem.coord -= shift / 2;
              var tickCategoryInterval = tickCategoryInterval || 0;
              // Avoid split a single data item when odd interval.
              if (tickCategoryInterval % 2 > 0) {
                  ticksItem.coord -= shift / ((tickCategoryInterval + 1) * 2);
              }
          });
          last = {coord: ticksCoords[ticksLen - 1].coord + shift};
          ticksCoords.push(last);
      }
  
      var inverse = axisExtent[0] > axisExtent[1];
  
      if (littleThan(ticksCoords[0].coord, axisExtent[0])) {
          clamp ? (ticksCoords[0].coord = axisExtent[0]) : ticksCoords.shift();
      }
      if (clamp && littleThan(axisExtent[0], ticksCoords[0].coord)) {
          ticksCoords.unshift({coord: axisExtent[0]});
      }
      if (littleThan(axisExtent[1], last.coord)) {
          clamp ? (last.coord = axisExtent[1]) : ticksCoords.pop();
      }
      if (clamp && littleThan(last.coord, axisExtent[1])) {
          ticksCoords.push({coord: axisExtent[1]});
      }
  
      function littleThan(a, b) {
          return inverse ? a > b : a < b;
      }
  }