饼状图

饼状图

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:Adobe JavaScript

作者:陈钰桃

撰写时间:2020年9月28日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

成果图

饼状图

一、HTML

按钮

<div class="row mt-2">

     <div class="col-auto mt-2 mt-lg-0">

        <button class="btn btn-outline-primary" type="button" οnclick="createChart()">查询</button>

     </div>

</div>

图表部分

<div class="row">

  <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->

     <div id="myBarChart" class="col" style="height:400px;"></div>

</div>

图表主题(一般引入自己需要的那个主题就可以了,避免占用内存)  <!-- 引入echarts的js -->

    <script src="~/Content/incubator-echarts-4.9.0/dist/echarts.js"></script>

    <script src="~/Content/incubator-echarts-4.9.0/theme/tech-blue.js"></script>

    <script src="~/Content/incubator-echarts-4.9.0/theme/vintage.js"></script>

    <script src="~/Content/incubator-echarts-4.9.0/theme/wonderland.js"></script>

二、SCRIPT

var layer;

var myBarChart;

$(function () {

     //layui

     layui.use(['layer', 'table'], function () {

         layer = layui.layer;

         createChart();

         });                                                                 

基于准备好的dom, 初始化echarts实例

myBarChart = echarts.init(document.getElementById('myBarChart'), 'wonderland');

});

窗口大小改变时,重新设置echarts图表的大小

$(window).resize(function () {

     myBarChart.resize();

 });

按钮点击事件

function createChart() {

     获取参数

     var academeID = $("#searchAcademeID").val();

     var specialtyID = $("#searchSpecialtyID").val();

     var gradeID = $("#searchGradeID").val();

     var classID = $("#searchClassID").val();

     刷新

     var layerIndex = layer.load();

     请求数据

     $.post("@Url.Content("~/StatistiscalChart/Pie/GetPieChartData")",

               {

                   academeID: academeID,

                   specialtyID: specialtyID,

                   gradeID: gradeID,

                   classID: classID,

               },

               function (jsonData) {

                   layer.close(layerIndex);

                   指定图表的配置项和数据

                   var option = {

                       title: {

                           text: jsonData.title,

                           subtext: '副标题',

                           left: 'center'

                       },

                       tooltip: {

                           trigger: 'item',

                           formatter: '{a} <br/>{b} : {c} ({d}%)'

                       },

                       legend: {

                           orient: 'vertical',

                           left: 'left',

                           data: jsonData.legendData

                       },

                       series: [

                           {

                               name: '学生人数',

                               type: 'pie', //指定饼状图

                               //radius: '70%', //指定圆的半径

                               radius: ['50%', '70%'],  //[内部空白圆的半径,外部圆的半径]

                               center: ['50%', '50%'], //指定圆心的位置

                               data: jsonData.chartData

                           }

                       ]

                   };

                   使用刚指定的配置项和数据显示图表。

                   myBarChart.setOption(option);

               });

       }

三、控制器

public ActionResult GetPieChartData(int? academeID,int? specialtyID,int? gradeID,int? classID)

{

      统计[学院][-专业][-年级][-班级]的学生男女比例

       string title = "全校";

       var queryStudent = from tabStudent in myModel.SYS_Student

                          select tabStudent;

 

      if (academeID != null && academeID > 0)

       {

            queryStudent = queryStudent.Where(o => o.academeID == academeID);

            title = myModel.SYS_Academe.Single(o => o.academeID == academeID).academeName;

        }

       if (specialtyID != null && specialtyID > 0)

        {

             queryStudent = queryStudent.Where(o => o.specialtyID == specialtyID);

             title += "-" + myModel.SYS_Specialty.Single(o => o.specialtyID == specialtyID).specialtyName;

        }

      if (gradeID != null && gradeID > 0)

        {

            queryStudent = queryStudent.Where(o => o.gradeID == gradeID);

            title += "-" + myModel.SYS_Grade.Single(o => o.gradeID == gradeID).gradeName;

        }

        if (classID != null && classID > 0)

        {

            queryStudent = queryStudent.Where(o => o.classID == classID);

            title += "-" + myModel.SYS_Class.Single(o => o.classID == classID).className;

        }

        title += "学生的男女比例";

 

        var chartData = (from tabStudent in queryStudent

                         group tabStudent by tabStudent.studentSex

                         into tabTemp

                         select new

                         {

                             name = tabTemp.Key,  //分组的key -- 学生性别

                             value = tabTemp.Count(), //各个组的学生人数

                         }).ToList();

 

        List<string> legendData = chartData.Select(o => o.name).ToList();

 

        return Json(new { title, chartData, legendData });

        }

}