docs: function calRadialBar(barSeries, api) {
      // Columns info on each category axis. Key is polar name
      var columnsMap = {};
  
      zrUtil.each(barSeries, function (seriesModel, idx) {
          var data = seriesModel.getData();
          var polar = seriesModel.coordinateSystem;
  
          var baseAxis = polar.getBaseAxis();
          var axisKey = getAxisKey(polar, baseAxis);
  
          var axisExtent = baseAxis.getExtent();
          var bandWidth = baseAxis.type === 'category'
              ? baseAxis.getBandWidth()
              : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());
  
          var columnsOnAxis = columnsMap[axisKey] || {
              bandWidth: bandWidth,
              remainedWidth: bandWidth,
              autoWidthCount: 0,
              categoryGap: '20%',
              gap: '30%',
              stacks: {}
          };
          var stacks = columnsOnAxis.stacks;
          columnsMap[axisKey] = columnsOnAxis;
  
          var stackId = getSeriesStackId(seriesModel);
  
          if (!stacks[stackId]) {
              columnsOnAxis.autoWidthCount++;
          }
          stacks[stackId] = stacks[stackId] || {
              width: 0,
              maxWidth: 0
          };
  
          var barWidth = parsePercent(
              seriesModel.get('barWidth'),
              bandWidth
          );
          var barMaxWidth = parsePercent(
              seriesModel.get('barMaxWidth'),
              bandWidth
          );
          var barGap = seriesModel.get('barGap');
          var barCategoryGap = seriesModel.get('barCategoryGap');
  
          if (barWidth && !stacks[stackId].width) {
              barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);
              stacks[stackId].width = barWidth;
              columnsOnAxis.remainedWidth -= barWidth;
          }
  
          barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);
          (barGap != null) && (columnsOnAxis.gap = barGap);
          (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);
      });
  
  
      var result = {};
  
      zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {
  
          result[coordSysName] = {};
  
          var stacks = columnsOnAxis.stacks;
          var bandWidth = columnsOnAxis.bandWidth;
          var categoryGap = parsePercent(columnsOnAxis.categoryGap, bandWidth);
          var barGapPercent = parsePercent(columnsOnAxis.gap, 1);
  
          var remainedWidth = columnsOnAxis.remainedWidth;
          var autoWidthCount = columnsOnAxis.autoWidthCount;
          var autoWidth = (remainedWidth - categoryGap)
              / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
          autoWidth = Math.max(autoWidth, 0);
  
          // Find if any auto calculated bar exceeded maxBarWidth
          zrUtil.each(stacks, function (column, stack) {
              var maxWidth = column.maxWidth;
              if (maxWidth && maxWidth < autoWidth) {
                  maxWidth = Math.min(maxWidth, remainedWidth);
                  if (column.width) {
                      maxWidth = Math.min(maxWidth, column.width);
                  }
                  remainedWidth -= maxWidth;
                  column.width = maxWidth;
                  autoWidthCount--;
              }
          });
  
          // Recalculate width again
          autoWidth = (remainedWidth - categoryGap)
              / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
          autoWidth = Math.max(autoWidth, 0);
  
          var widthSum = 0;
          var lastColumn;
          zrUtil.each(stacks, function (column, idx) {
              if (!column.width) {
                  column.width = autoWidth;
              }
              lastColumn = column;
              widthSum += column.width * (1 + barGapPercent);
          });
          if (lastColumn) {
              widthSum -= lastColumn.width * barGapPercent;
          }
  
          var offset = -widthSum / 2;
          zrUtil.each(stacks, function (column, stackId) {
              result[coordSysName][stackId] = result[coordSysName][stackId] || {
                  offset: offset,
                  width: column.width
              };
  
              offset += column.width * (1 + barGapPercent);
          });
      });
  
      return result;
  }