鱼C论坛

 找回密码
 立即注册
查看: 3997|回复: 1

[学习笔记] 风险统计图---》引入饼图数据库数据

[复制链接]
发表于 2021-4-21 07:51:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>pie</title>
  8.     <!--引入链接-->
  9.     <script src="echarts.js"></script>
  10. </head>
  11. <body>
  12.     <!--每个div单独占据一行,如果想要显示多个统计图,可以创建多个div-->
  13.     <div id="main" style="height: 400px;width: 1024px;"></div>
  14.     <div id="main2" style="height: 400px;width: 1024px;"></div>
  15.     <script type="text/javascript">
  16.         <?php
  17.             //添加公共文件
  18.             include_once 'mysql_public.php';
  19.             //获取所有风险记录
  20.             $sql_risk = "SELECT * FROM `trisk_list`";
  21.             //获取结果集
  22.             $res_risk = myerror($sql_risk);
  23.             //获取结果集数据条数:多少行记录
  24.             $rows_risk = mysqli_num_rows($res_risk);
  25.             //利用while获取,每次取到数据之后判断保存数据的结果,只要结果不为false,那么一直取
  26.             while($row_risk = mysqli_fetch_assoc($res_risk))
  27.             {
  28.                 //获取风险统计数组
  29.                 $risks[] = $row_risk;
  30.             }
  31.             //echo '<pre>';
  32.             //建立一个循环,修改每个风险记录的时间,只保留年份。
  33.             for($index = 0; $index < $rows_risk; $index++)
  34.             {
  35.                 //对日期部分进行分割,分割后返回的datetime为一个数组。
  36.                 $dateTime = explode('-',$risks[$index]['Record_time']);
  37.                 //令风险记录时间只保留年份
  38.                 $risks[$index]['Record_time'] = $dateTime[0];
  39.             }
  40.             //输出修改后的风险记录
  41.             //var_dump($risks);

  42.             //设计一个变量来接受各个年份的数据
  43.             $RiskNum = array(
  44.                 '2019'=>array(
  45.                     '高风险'=>0,
  46.                     '中风险'=>0,
  47.                     '低风险'=>0
  48.                 ),
  49.                 '2020'=>array(
  50.                     '高风险'=>0,
  51.                     '中风险'=>0,
  52.                     '低风险'=>0
  53.                 ),
  54.                 '2021'=>array(
  55.                     '高风险'=>0,
  56.                     '中风险'=>0,
  57.                     '低风险'=>0
  58.                 )
  59.             );
  60.             //记录不同年份的各个风险类型的数量。
  61.             for($index = 0; $index < $rows_risk; $index++)
  62.             {
  63.                 if((int)($risks[$index]['Record_time']) == 2019)
  64.                 {
  65.                     if((int)($risks[$index]['Risk_type']) == 1)
  66.                     {
  67.                         $RiskNum['2019']['高风险']++;
  68.                     }
  69.                     else if((int)($risks[$index]['Risk_type']) == 2)
  70.                     {
  71.                         $RiskNum['2019']['中风险']++;
  72.                     }
  73.                     else if((int)($risks[$index]['Risk_type']) == 3)
  74.                     {
  75.                         $RiskNum['2019']['低风险']++;
  76.                     }
  77.                 }
  78.                 else if((int)($risks[$index]['Record_time']) == 2020)
  79.                 {
  80.                     if((int)($risks[$index]['Risk_type']) == 1)
  81.                     {
  82.                         $RiskNum['2020']['高风险']++;
  83.                     }
  84.                     else if((int)($risks[$index]['Risk_type']) == 2)
  85.                     {
  86.                         $RiskNum['2020']['中风险']++;
  87.                     }
  88.                     else if((int)($risks[$index]['Risk_type']) == 3)
  89.                     {
  90.                         $RiskNum['2020']['低风险']++;
  91.                     }
  92.                 }
  93.                 else if((int)($risks[$index]['Record_time']) == 2021)
  94.                 {
  95.                     if((int)($risks[$index]['Risk_type']) == 1)
  96.                     {
  97.                         $RiskNum['2021']['高风险']++;
  98.                     }
  99.                     else if((int)($risks[$index]['Risk_type']) == 2)
  100.                     {
  101.                         $RiskNum['2021']['中风险']++;
  102.                     }
  103.                     else if((int)($risks[$index]['Risk_type']) == 3)
  104.                     {
  105.                         $RiskNum['2021']['低风险']++;
  106.                     }
  107.                 }
  108.             }

  109.             //输出风险数量数组
  110.             //var_dump($RiskNum);

  111.             //将php数组转为json格式
  112.             $RiskNum_json = json_encode($RiskNum);
  113.         ?>
  114.         //引用该js文件后,该js文件需要获取外部数据
  115.         var RiskNum_json = <?=$RiskNum_json?>;
  116.         var RiskNum = eval(RiskNum_json);
  117.         //color为此系列自己的调色盘
  118.         //radius:饼图的半径,外半径为可视区尺寸(容器高宽中较小一项)的 55% 长度。
  119.         //数据库传递过来的数据项是一个二维数组,如何处理?
  120.         //解:将数组传递给data即可
  121.         //value_1,表示高风险总数。以此类推。
  122.         var value_1 = RiskNum['2019']['高风险']+RiskNum['2020']['高风险']+RiskNum['2021']['高风险'];
  123.         var value_2 = RiskNum['2019']['中风险']+RiskNum['2020']['中风险']+RiskNum['2021']['中风险'];
  124.         var value_3 = RiskNum['2019']['低风险']+RiskNum['2020']['低风险']+RiskNum['2021']['低风险'];
  125.         var value_2019 = RiskNum['2019']['高风险']+RiskNum['2019']['中风险']+RiskNum['2019']['低风险'];
  126.         var value_2020 = RiskNum['2020']['高风险']+RiskNum['2020']['中风险']+RiskNum['2020']['低风险'];
  127.         var value_2021 = RiskNum['2021']['高风险']+RiskNum['2021']['中风险']+RiskNum['2021']['低风险'];
  128.         var RiskData = [
  129.             {value:value_1,name:"较大风险"},
  130.             {value:value_2,name:"中风险"},
  131.             {value:value_3,name:"低风险"},
  132.         ];
  133.         var RiskData2 = [
  134.             {value:value_2019,name:"2019年风险数量"},
  135.             {value:value_2020,name:"2020年风险数量"},
  136.             {value:value_2021,name:"2021年风险数量"},
  137.         ];

  138.         //定位:如果使用center/middle等位置描述,需写成字符串格式,百分比也这么写:radius:'55%'。如果写绝对值,那么以number形式书写,单位是像数值(单位不用写)
  139.         var myChart = echarts.init(document.getElementById("main"));
  140.         var option = {
  141.             title: [{
  142.                 text: '风险统计图',
  143.                 left: "center"
  144.             },{
  145.                 subtext: "风险类型占比",
  146.                 left: "18%",
  147.                 top: "75%",
  148.                 textAline:'center'
  149.             },{
  150.                 subtext: "年度风险总量",
  151.                 left: "74%",
  152.                 top: "75%",
  153.                 textAline:'center'
  154.             }],
  155.             tooltip: {   
  156.                 trigger: 'item',
  157.                 //饼图: a:系列名,b:数据名,c:数值,d:百分比。
  158.                 //formatter,提示框浮层内容格式器,支持字符串模板和回调函数两种形式。
  159.                 formatter: '{a} <br/>{b} : {c} ({d}%)'
  160.             },
  161.             toolbox:{
  162.                 show: true,
  163.                 feature: {
  164.                     mark: {show: true},
  165.                     dataView: {show: true, readOnly: false},
  166.                     restore: {show: true},
  167.                     saveAsImage: {show: true}
  168.                 }
  169.             },
  170.             legend: {
  171.                 data:['较大风险','中风险','低风险','2019年风险数量','2020年风险数量','2021年风险数量'],
  172.                 top:'10%',
  173.             },
  174.             series:[{
  175.                 name: "风险类型占比",
  176.                 color:['red','orange','blue'],
  177.                 type: "pie",
  178.                 radius: '35%',
  179.                 center:['50%','50%'],
  180.                 data: RiskData,
  181.                 right:'55%',
  182.                 left:0,
  183.                 top:0,
  184.                 buttom:0
  185.             },{
  186.                 name: "年度风险总量",
  187.                 color:['red','orange','pink'],
  188.                 type: "pie",
  189.                 radius: '35%',
  190.                 data: RiskData2,
  191.                 left:'55%',
  192.                 right:0,
  193.                 top:0,
  194.                 buttom:0
  195.             }]
  196.         };
  197.         myChart.setOption(option);
  198.         // 处理点击事件并且弹出数据名称
  199.         myChart.on('click', function (params) {
  200.             alert(params.name);
  201.         });
  202.     </script>
  203.     <script type="text/javascript">
  204.         <?php
  205.             //添加公共文件
  206.             include_once 'mysql_public.php';
  207.             //获取所有风险记录
  208.             $sql_risk = "SELECT * FROM `trisk_list`";
  209.             //获取结果集
  210.             $res_risk = myerror($sql_risk);
  211.             //获取结果集数据条数:多少行记录
  212.             $rows_risk = mysqli_num_rows($res_risk);
  213.             //利用while获取,每次取到数据之后判断保存数据的结果,只要结果不为false,那么一直取
  214.             while($row_risk = mysqli_fetch_assoc($res_risk))
  215.             {
  216.                 //获取风险统计数组
  217.                 $risks[] = $row_risk;
  218.             }
  219.             //echo '<pre>';
  220.             //建立一个循环,修改每个风险记录的时间,只保留年份。
  221.             for($index = 0; $index < $rows_risk; $index++)
  222.             {
  223.                 //对日期部分进行分割,分割后返回的datetime为一个数组。
  224.                 $dateTime = explode('-',$risks[$index]['Record_time']);
  225.                 //令风险记录时间只保留年份
  226.                 $risks[$index]['Record_time'] = $dateTime[0];
  227.             }
  228.             //输出修改后的风险记录
  229.             //var_dump($risks);

  230.             //设计一个变量来接受各个年份的数据
  231.             $RiskNum = array(
  232.                 '2019'=>array(
  233.                     '高风险'=>0,
  234.                     '中风险'=>0,
  235.                     '低风险'=>0
  236.                 ),
  237.                 '2020'=>array(
  238.                     '高风险'=>0,
  239.                     '中风险'=>0,
  240.                     '低风险'=>0
  241.                 ),
  242.                 '2021'=>array(
  243.                     '高风险'=>0,
  244.                     '中风险'=>0,
  245.                     '低风险'=>0
  246.                 )
  247.             );
  248.             //记录不同年份的各个风险类型的数量。
  249.             for($index = 0; $index < $rows_risk; $index++)
  250.             {
  251.                 if((int)($risks[$index]['Record_time']) == 2019)
  252.                 {
  253.                     if((int)($risks[$index]['Risk_type']) == 1)
  254.                     {
  255.                         $RiskNum['2019']['高风险']++;
  256.                     }
  257.                     else if((int)($risks[$index]['Risk_type']) == 2)
  258.                     {
  259.                         $RiskNum['2019']['中风险']++;
  260.                     }
  261.                     else if((int)($risks[$index]['Risk_type']) == 3)
  262.                     {
  263.                         $RiskNum['2019']['低风险']++;
  264.                     }
  265.                 }
  266.                 else if((int)($risks[$index]['Record_time']) == 2020)
  267.                 {
  268.                     if((int)($risks[$index]['Risk_type']) == 1)
  269.                     {
  270.                         $RiskNum['2020']['高风险']++;
  271.                     }
  272.                     else if((int)($risks[$index]['Risk_type']) == 2)
  273.                     {
  274.                         $RiskNum['2020']['中风险']++;
  275.                     }
  276.                     else if((int)($risks[$index]['Risk_type']) == 3)
  277.                     {
  278.                         $RiskNum['2020']['低风险']++;
  279.                     }
  280.                 }
  281.                 else if((int)($risks[$index]['Record_time']) == 2021)
  282.                 {
  283.                     if((int)($risks[$index]['Risk_type']) == 1)
  284.                     {
  285.                         $RiskNum['2021']['高风险']++;
  286.                     }
  287.                     else if((int)($risks[$index]['Risk_type']) == 2)
  288.                     {
  289.                         $RiskNum['2021']['中风险']++;
  290.                     }
  291.                     else if((int)($risks[$index]['Risk_type']) == 3)
  292.                     {
  293.                         $RiskNum['2021']['低风险']++;
  294.                     }
  295.                 }
  296.             }

  297.             //输出风险数量数组
  298.             //var_dump($RiskNum);

  299.             //将php数组转为json格式
  300.             $RiskNum_json = json_encode($RiskNum);
  301.         ?>
  302.         //引用该js文件后,该js文件需要获取外部数据
  303.         var RiskNum_json = <?=$RiskNum_json?>;
  304.         var RiskNum = eval(RiskNum_json);
  305.         //输出2019年高风险数据,测试传输成功与否
  306.         //alert(RiskNum['2019']['高风险']);
  307.         //legend:图例组件展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。
  308.         //legend,会在统计图顶部显示不同颜色的按钮。
  309.         var myChart = echarts.init(document.getElementById('main2'));
  310.         var option = {
  311.             title:{text:"年度风险数量对比直方图",left:"center"},
  312.             legend: {
  313.                 top:"7%",
  314.                 data:['高风险','中风险','低风险']
  315.             },
  316.             toolbox: {
  317.                 show :true,
  318.                 feature: {
  319.                     dataView:{show:true,title:'数据视图',optionToContent:function(){
  320.                         var table = '<table class="dataViewTable"><tbody><tr class="dataViewTr">'
  321.                                   + '<td class="dataViewHead">' + 'year'+ '</td>'
  322.                                   + '<td class="dataViewHead">' + '高风险' + '</td>'
  323.                                   + '<td class="dataViewHead">' + '中风险' + '</td>'
  324.                                   + '<td class="dataViewHead">' + '低风险' + '</td>'
  325.                                   + '</tr>';
  326.                         for(var index = 2019; index <= 2021; index++){
  327.                             var year = index.toString();
  328.                             table += '<tr class="dataViewTr">'
  329.                                   + '<td class="dataViewTd">' + index + '</td>'
  330.                                   + '<td class="dataViewTd">' + RiskNum[year]['高风险'] + '</td>'
  331.                                   + '<td class="dataViewTd">' + RiskNum[year]['中风险'] + '</td>'
  332.                                   + '<td class="dataViewTd">' + RiskNum[year]['低风险'] + '</td>'
  333.                                   + '</tr>';
  334.                         }
  335.                         table += '</tbody></table>';
  336.                         return table;
  337.                     }},
  338.                     restore:{show:true},
  339.                     magicType:{type:['bar','line']},
  340.                     saveAsImage:{show:true}
  341.                 }
  342.             },
  343.             tooltip: {
  344.             },
  345.             xAxis:{
  346.                 type:'category',
  347.                 data: ['2019','2020','2021']   
  348.             },
  349.             yAxis:{
  350.                 type:'value'
  351.             },
  352.             dataset:{
  353.                 source:[
  354.                     ['year','高风险','中风险','低风险'],
  355.                     ['2019',RiskNum['2019']['高风险'],RiskNum['2019']['中风险'],RiskNum['2019']['低风险']],
  356.                     ['2020',RiskNum['2019']['高风险'],RiskNum['2020']['中风险'],RiskNum['2020']['低风险']],
  357.                     ['2021',RiskNum['2021']['高风险'],RiskNum['2021']['中风险'],RiskNum['2021']['低风险']],
  358.                 ]
  359.             },
  360.             series: [
  361.                 {
  362.                     //name: '高风险',
  363.                     type: 'bar',
  364.                     // 根据stack的值来选取那些柱子堆叠在一起
  365.                     stack: '风险等级',
  366.                     color: 'red',
  367.                     emphasis: {
  368.                         focus: 'series'
  369.                     },
  370.                     //data: [320, 332, 301],
  371.                     barWidth: '25%'
  372.                 },
  373.                 {
  374.                     //name: '中风险',
  375.                     type: 'bar',
  376.                     stack: '风险等级',
  377.                     color: 'orange',
  378.                     emphasis: {
  379.                         focus: 'series'
  380.                     },
  381.                     //data: [120, 132, 101],
  382.                     barWidth: '25%'
  383.                 },
  384.                 {
  385.                     //name: '低风险',
  386.                     type: 'bar',
  387.                     stack: '风险等级',
  388.                     color: 'blue',
  389.                     emphasis: {
  390.                         focus: 'series'
  391.                     },
  392.                     //data: [220, 182, 191],
  393.                     barWidth: '25%'
  394.                 }
  395.             ]
  396.         };
  397.         //把配置项给实例对象
  398.         myChart.setOption(option);
  399.     </script>
  400. </body>
  401. </html>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-4-21 08:45:29 | 显示全部楼层
厉害学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 14:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表