zoukankan      html  css  js  c++  java
  • svg绘制圆形数据分布图

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            #div1{ 600px;height: 600px;background: white; margin:20px auto; overflow: hidden;}
            body{background: gray;}
        </style>
    </head>
    <body>
        <div id="div1"> 
            <svg id = "svg1" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" >
    
            </svg> 
            
        </div>
    </body>
    </html>
    <script>
        window.onload = function()
        {
            var svgNS = 'http://www.w3.org/2000/svg';
            var oParent = document.getElementById('div1');
            var oSvg = document.getElementById("svg1");
     
    
         /* 封装一个创建标签的函数 */
          function createTag(tag,objAttr)
         {
           var oTag = document.createElementNS(svgNS,tag);
        
           for(var attr in objAttr)
           {
               oTag.setAttribute(attr,objAttr[attr]);
           }
           return oTag;
         }
         
         var arrNum = [23.61,17.10,16.05,15.40,11.72,14.95];
         var angle = 360;
         var sumNum = 0;
         var outerR = 120;
         var innerR = 70;
         var centerX = 200;
         var centerY = 200;
         var outerXY = [{x:320,y:200}]
         var innerXY = [{x:270,y:200}];
         var arrColor = ['red','blue','yellow','green','black','gray'];
         for(var i =0;i<arrNum.length;i++)
         {
             var agNum = arrNum[i]/100*angle;
             sumNum += agNum;
    
             if(i==arrNum.length-1)
             {
                 sumNum = 360;
             }
             var outerX = Math.cos(sumNum*Math.PI/180)*outerR + centerX;
             var outerY = Math.sin(sumNum*Math.PI/180)*outerR + centerY;
             outerXY.push({x:outerX,y:outerY});
    
             var innerX = Math.cos(sumNum*Math.PI/180)*innerR + centerX;
             var innerY = Math.sin(sumNum*Math.PI/180)*innerR + centerY;
             innerXY.push({x:innerX,y:innerY});
    
         }
    
         for(var i =0 ;i<outerXY.length;i++)
         {
             if(i == outerXY.length-1)
             {
                 break;
             }
             var oPath = createTag('path',{fill:arrColor[i],d:'M'+outerXY[i].x+' '+
             outerXY[i].y+'A'+outerR+' '+outerR+' '+' 0 0 1 '+outerXY[i+1].x+' '+
             outerXY[i+1].y+'L'+innerXY[i+1].x+' '+innerXY[i+1].y+'A'+innerR+' '+
             innerR+ ' 0 0 0 '+innerXY[i].x+' '+innerXY[i].y});
             
             oSvg.appendChild(oPath);
         }
     
    
        }
    
        
    
    
    </script>

  • 相关阅读:
    滑动窗口模板
    交换机命令
    针对织梦程序列表字段内可有可无的显示方法
    dedecms中常见问题修改方法
    redis系列之------字典
    1.InfluxDB-官方测试数据导入
    MYSQL第二课
    centos6.8下hadoop3.1.1完全分布式安装指南
    Mysql—添加用户并授权
    什么是全文检索
  • 原文地址:https://www.cnblogs.com/Aaron-Lee/p/13861846.html
Copyright © 2011-2022 走看看