code: function(data, isHorizontal, precision) {
      var visibles = data.datasets.map(function(dataset) {
        if (!dataset._meta) return true;
  
        for (var i in dataset._meta) {
          return !dataset._meta[i].hidden;
        }
      });
      
      var datasetDataLength = 0;
      if (data && data.datasets && data.datasets[0] && data.datasets[0].data) {
        datasetDataLength = data.datasets[0].data.length;
      }
      var totals = Array.apply(null, new Array(datasetDataLength)).map(function(el, i) {
        return data.datasets.reduce(function(sum, dataset, j) {
          var key = dataset.stack;
          if (!sum[key]) sum[key] = 0;
          sum[key] += Math.abs(dataValue(dataset.data[i], isHorizontal)) * visibles[j];
  
          return sum;
        }, {});
      });
  
      data.calculatedData = data.datasets.map(function(dataset, i) {
        return dataset.data.map(function(val, i) {
          var total = totals[i][dataset.stack];
          var dv = dataValue(val, isHorizontal);
          return dv && total ? round(dv / total, precision) : 0;
        });
      });
    }
docs: set calculated rate (xx%) to data.calculatedData