asimryu

파이그래프

Jan 12th, 2017
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 2.38 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Pie Chart</title>
  6.     <style>
  7.         table {
  8.             width: 500px;
  9.             border-collapse: collapse;
  10.         }
  11.         table td {
  12.             width: 25%;
  13.             border: 1px solid #666;
  14.             text-align: center;
  15.         }
  16.         table tr:not(:first-child):hover td{
  17.             background-color: red;
  18.             color: white;
  19.         }
  20.     </style>
  21. </head>
  22. <body>
  23.     <table>
  24.         <tr>
  25.             <td>구분</td>
  26.             <td>1월</td>
  27.             <td>2월</td>
  28.             <td>3월</td>
  29.         </tr>
  30.         <tr>
  31.             <td>HTML</td>
  32.             <td>20</td>
  33.             <td>50</td>
  34.             <td>34</td>
  35.         </tr>
  36.         <tr>
  37.             <td>CSS</td>
  38.             <td>30</td>
  39.             <td>10</td>
  40.             <td>5</td>
  41.         </tr>
  42.         <tr>
  43.             <td>JavaScript</td>
  44.             <td>80</td>
  45.             <td>60</td>
  46.             <td>100</td>
  47.         </tr>
  48.     </table>
  49.     <h1 id="title">Chart Area</h1>
  50.     <canvas id="chart" width="500" height="500"></canvas>
  51.     <script src="http://code.jquery.com/jquery-latest.js"></script>
  52.     <script>
  53.         var canvas = document.getElementById("chart");
  54.         var ctx = canvas.getContext("2d");
  55.         var w = canvas.width;
  56.         var h = canvas.height;
  57.         var r = w / 2;
  58.         var x = w / 2;
  59.         var y = h / 2;
  60.  
  61.         // ctx.beginPath();
  62.         // ctx.fillStyle = "red";
  63.         // ctx.moveTo(x,y);
  64.         // ctx.arc(x,y,r,0,0.5*Math.PI);
  65.         // ctx.fill();
  66.  
  67.         var colors = ["red","green","blue"];
  68.         var month = ["1월","2월","3월"];
  69.  
  70.         $("table tr").not(":first").on("mouseover",function(){
  71.             var title = $(this).children("td:first").text();
  72.             $("#title").text(title);
  73.             var tds = $(this).children("td").not(":first");
  74.             var data = [];
  75.             var total = 0;
  76.             for( var i=0; i<tds.length; i++) {
  77.                 data[i] = Number( $( tds[i] ).text() );
  78.                 total += data[i];
  79.             }
  80.  
  81.             ctx.clearRect(0,0,w,h);
  82.             var start = 0;
  83.  
  84.             //반복문으로 파이 그리기
  85.             for( var i=0; i<data.length; i++ ) {
  86.                 var pcnt = data[i] / total;
  87.                 var end = start + 2*Math.PI*pcnt;
  88.                 ctx.beginPath();
  89.                 ctx.fillStyle = colors[i];
  90.                 ctx.moveTo(x,y);
  91.                 ctx.arc(x,y,r,start,end);
  92.                 ctx.moveTo(x,y);
  93.                 ctx.fill();
  94.  
  95.                 //Label 추가
  96.                 var pos = getarc(x,y,r/1.7,start + 2*Math.PI*(pcnt/2));
  97.                 ctx.fillStyle = "white";
  98.                 ctx.font = "15px Gullim";
  99.                 ctx.textAlign = "center";
  100.                 ctx.fillText(month[i], pos[0], pos[1]);
  101.                 ctx.fillText(data[i], pos[0], pos[1]+18);
  102.                 start = end;
  103.             }
  104.            
  105.         });
  106.         function getarc(x,y,r,angle){
  107.             return [x+Math.cos(angle)*r,y+Math.sin(angle)*r];
  108.         }      
  109.     </script>
  110. </body>
  111. </html>
Advertisement
Add Comment
Please, Sign In to add comment