ECharts饼状图 使用记录

在这里插入图片描述

let ret = {
  "code": 200,
  "msg": "success",
  "data": [{
      "value": 1048,
      "name": "高等数学",
      "isFinsh": 1
    },
    {
      "value": 735,
      "name": "大学英语",
      "isFinsh": 1
    },
    {
      "value": 580,
      "name": "数字逻辑",
      "isFinsh": 1
    },
    {
      "value": 484,
      "name": "计算机操作系统",
      "isFinsh": 0
    },
    {
      "value": 300,
      "name": "数据结构",
      "isFinsh": 0
    }
  ]
}

let legendData = []
let legendSelected = {}
let total = 0
let totalFinsh = 0

ret.data.forEach((item, index) => {
  legendData.push(item.name)
  if (item.isFinsh === 0) {
    legendSelected[item.name] = false
  } else if (item.isFinsh === 1) {
    totalFinsh += item.value
  }
  total += Number(item.value)
})

let dom = document.getElementById('container');
let myChart = echarts.init(dom, null, {
  renderer: 'canvas',
  useDirtyRect: false
});
let app = {};

let option = {
  tooltip: {
    trigger: 'item'
  },
  legend: {
    orient: 'horizontal',
    top: 10,
    left: 'left',
    textStyle: {
      lineHeight: 20,
      // 通过rich自定义尺寸,加宽度使百分比及数值各自对齐
      rich: {
        a: {
          width: 60,
          align: 'left'
        },
        b: {
          width: 40,
          align: 'right'
        }
      }
    },
    data: legendData,
    selected: legendSelected,
    formatter: (name) => {
      let tarValue;
      let tarName = name.length > 5 ? name.substr(0, 5) : name
      ret.data.forEach((item, i) => {
        if (item.name === name) {
          tarValue = Number(item.value ? item.value : 0)
        }
      })
      let arr = [
        '{a|' + tarName + '}' + '{b|' + tarValue + '}'
      ]
      return arr
    }
  },
  graphic: [{ //环形图中间添加文字
    type: 'text', //通过不同top值可以设置上下显示
    left: 'center',
    top: '53%',
    style: {
      text: '学业完成率\n' + Math.round(totalFinsh / total * 100) + '%',
      textAlign: 'center',
      fill: '#1E7CE8', //文字的颜色
      fontSize: 12,
      lineHeight: 16,
    }
  }],
  series: [{
    name: '绩点完成率',
    type: 'pie',
    radius: ['24%', '50%'],
    top: 50,
    data: ret.data,
    labelLine: {
      normal: {
        show: true,
        legend: 10,
        legend2: 100,
        lineStyle: {
          color: "#166AC1"
        }
      }
    },
    label: {
      formatter: function (pram) {
        console.log(pram)
        return '{a|' + pram.data.name + '}'
      },
      padding: [0, -10, 20, -10],
      rich: {
        a: {
          fontWeight: 500,
          lineHeight: 32,
          align: "right",
        },
      },
    },
    emphasis: {
      itemStyle: {
        shadowBlur: 10,
        shadowOffsetX: 0,
        shadowColor: 'rgba(0, 0, 0, 0.5)'
      }
    }
  }]
};

if (option && typeof option === 'object') {
  myChart.setOption(option);
}

myChart.on('legendselectchanged', (params) => {
  console.log(params)
  let percent = 0
  let total = 0
  let totalFinsh = 0

  ret.data.forEach((item, index) => {
    if (params.selected[item.name] === true) {
      totalFinsh += item.value
    }
    total += item.value
  })

  alert(Math.round(totalFinsh / total * 100))
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值