通过清心醉

echarts创建饼状图形(包含自定义的勾选)

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
	<script src="echarts.js"></script><!-- 引用echartsJS -->
    <title>清心醉-echarts.js</title>
</head>
<body>
	<div id="show" style="width: 1200px;height:500px;"></div> <!-- 饼状图形区域 -->
</body>
<script>
var maxSum = 50; //总数量
var maxData  = 0; //百分比计算需要
function genData() {
  const nameList = [];
  const legendData = [];
  const seriesData = [];
  var selectData = {};
  for(var i = 0 ; i<= maxSum  ; i ++){
	legendData.push("demo"+i); //创建对应的名称数据
	maxData = (maxData+ (100-i));
        seriesData.push({ //结构数据体
            name: "demo"+i,
            value: (100-i),
        });
	//因为饼状显示的数量问题,为了避免过多,前面的30个显示出来,后面的20个默认不勾选
	if(i<=30){
		selectData["demo"+i] = true; //选重状态
	} else {
		selectData["demo"+i] = false; //非选中状态
	}
  }
  return {
    legendData: legendData,
    seriesData: seriesData,
    selectData: selectData
  };
}
const data = genData();
var chartDom = document.getElementById('show');
var myChart = echarts.init(chartDom);
var option;
//注意:
//百分比的问题,因为业务需求不同,比如作者的项目中,百分比是需要当前的除所有的,但是如果取消了对应名称selected事件之后,系统会默认按照对应数值从新计算百分比
//formatter: '{a} <br/>{b} : {c} ({d}%)'的方式,为饼图内所有数据综合的当前百分比
//formatter:function(obj)方法,为根据总的数量,来获取实际的总百分比,就算只保留1个其他全部取消显示(selected=false),一样只显示其在对应真是总数的百分比
//所以如果需要系统计算已显示的,则使用formatter: '{a} <br/>{b} : {c} ({d}%)方法,否则则使用formatter:function(obj)回调方法进行处理
//还有排序的问题,可以参考更多echarts文档,代码中的一样为作者项目动态数据中已经按大到小已排列

option = {
  title: {
    text: '类型统计',
    subtext: '总数量['+ maxSum  +']',
    left: 'center'
  },
  tooltip: { //鼠标移动到对应区域的数据
    trigger: 'item',
    //formatter: '{a} <br/>{b} : {c} ({d}%)', //这里的方法为实际占用的动态方法
    formatter:function(obj){
        var tarValue; //当前名字的占比
        var list = data.seriesData;
        for(var i = 0 ; i<list.length; i++){
            if(list[i].name == obj.data.name){
                tarValue  = list[i]['value'];
                break;
            }
        }
		//其实可以直接使用obj.data.value,因为后面也有需要获取百分比的,所以统一这种方式.
        var p = ((tarValue/maxData)*100); //
        return obj.data.name + ":"+ tarValue+ "("+p.toFixed(2)+"%"+")";
    },
  },
  
  legend: {
    type: 'scroll',
    orient: 'vertical',
    right: 10,
    top: 20,
    bottom: 20,
    data: data.legendData,
    selected:data.selectData,
    //show:true,
    //利用回调函数来获取百分比
    formatter:function(name){ //这里因为获取的不是obj,所以只能通过循环来获取,这里获取的是右边显示的对应名称
		//console.log(name);
        var total = maxSum ; //总数
        var tarValue; //当前名字的占比
        var list = data.seriesData;
        for(var i = 0 ; i<list.length; i++){
            if(list[i].name == name){
                tarValue  = list[i]['value'];
                break;
            }
        }
		//如果可以,建议这里进行tarValue和maxSum是否为0的动作,不知道JS内除0是否会有异常
		//因为该代码是从作者项目中动态扣出来的,已经确保seriesData.value保证>0
        var p = ((tarValue/maxData)*100);
        return name + ":"+p.toFixed(2)+"%";
    }
  },
  series: [ //饼图的分布区域及占比
    {
      name: '总数量',
      type: 'pie',
      radius: '60%',
      center: ['40%', '60%'],
      data: data.seriesData,
      selected: data.selectData,
      emphasis: {
        itemStyle: {
          shadowBlur: 10,
          shadowOffsetX: 0,
          shadowColor: 'rgba(0, 0, 0, 0.5)'
        }
      }
    }
  ]
};
myChart.setOption(option);
</script>
</html>

关于作者

清心醉 administrator

发表评论

请输入验证码: