ECharts踩坑之formatter的百分比显示

582 阅读1分钟

需求描述

在系统开发中发现ECharts在饼图中的formatter的模板变量d的百分比精度使用的不是四舍五入制的,与系统设计要求不符,所以考虑重新实现formatter。

image.png

解决方案

实现代码如下:

export function toDataPie(data, chart) {
   // data是ECharts需要使用到的data数据
   // chart是ECharts的默认配置
   // 重写需要修改的ECharts配置
  if (!data) {
    return chart;
  }
  const arr = [];
  const newChart = _.cloneDeep(chart);
  // total数据值的总和
  let total = 0;
  newChart.series.data = data;
  _.each(data, function (item, index) {
    total += item.value || 0;
    if (item.value == 0) {
      newChart.legend.selected[item.name] = false;
    }
    arr.push(item.name);
  });
  newChart.series.avoidLabelOverlap = true;
  newChart.series.minAngle = 5;
  newChart.legend && newChart.legend.data ? (newChart.legend.data = arr) : '';
  newChart.tooltip.formatter = (info) => {
    // 自定义的字符串模板
    const value = info.value;
    // 对圆饼图的百分比进行四舍五入处理
    const rat = ((parseInt(value) / total) * 100).toFixed(2);
    return `<div><span>${info.seriesName}</span><br/><span>${info.name} : ${value}(${rat}%)</span></div>`;
  };
  return newChart;
}