Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.49 KB | None | 0 0
  1. function drawPie(canvasId,data,legend){
  2. var ctx = $("#pie-canvas-" + canvasId).get(0).getContext("2d");
  3.  
  4. var piedata = [];
  5. $.each(data,function(i,val){
  6. piedata.push({value:val.count,color:val.color,label:val.status});
  7. });
  8. var options =
  9. {
  10. tooltipTemplate: "<%= Math.round(circumference / 6.283 * 100) %>%",
  11. }
  12. var pie = new Chart(ctx).Pie(piedata,options);
  13. if(legend)document.getElementById("legend").innerHTML = pie.generateLegend();
  14. }
  15.  
  16. printf('<table><tr>');
  17. echo '<td style="text-align: right;"><canvas id="pie-canvas-'
  18. . $canvasId
  19. . '" width="256" height="256" ></canvas></td><td style="text-align: left;width:360px;height:auto" id="legend" class="chart-legend"></td></tr></table>';
  20.  
  21. echo '<script type="text/javascript">drawPie('
  22. . $canvasId
  23. . ', '
  24. . $data3
  25. .', '
  26. . $legend
  27. . ');</script>';
  28.  
  29. function drawSegmentValues()
  30. {
  31. for(var i=0; i<myPieChart.segments.length; i++)
  32. {
  33. // Default properties for text (size is scaled)
  34. ctx.fillStyle="white";
  35. var textSize = canvas.width/10;
  36. ctx.font= textSize+"px Verdana";
  37.  
  38. // Get needed variables
  39. var value = myPieChart.segments[i].value;
  40. var startAngle = myPieChart.segments[i].startAngle;
  41. var endAngle = myPieChart.segments[i].endAngle;
  42. var middleAngle = startAngle + ((endAngle - startAngle)/2);
  43.  
  44. // Compute text location
  45. var posX = (radius/2) * Math.cos(middleAngle) + midX;
  46. var posY = (radius/2) * Math.sin(middleAngle) + midY;
  47.  
  48. // Text offside to middle of text
  49. var w_offset = ctx.measureText(value).width/2;
  50. var h_offset = textSize/4;
  51.  
  52. ctx.fillText(value, posX - w_offset, posY + h_offset);
  53. }
  54. }
  55.  
  56. Math.round(myPieChart.segments[i].value/totalValue*100)+'%';
  57.  
  58. var value = myPieChart.segments[i].value/totalValue*100;
  59. if(Math.round(value) !== value)
  60. value = (myPieChart.segments[i].value/totalValue*100).toFixed(1);
  61. value = value + '%';
  62.  
  63. var data = {
  64. datasets: [{
  65. data: [
  66. 11,
  67. 16,
  68. 7,
  69. 3,
  70. 14
  71. ],
  72. backgroundColor: [
  73. "#FF6384",
  74. "#4BC0C0",
  75. "#FFCE56",
  76. "#E7E9ED",
  77. "#36A2EB"
  78. ],
  79. label: 'My dataset' // for legend
  80. }],
  81. labels: [
  82. "Red",
  83. "Green",
  84. "Yellow",
  85. "Grey",
  86. "Blue"
  87. ]
  88. };
  89.  
  90. var pieOptions = {
  91. events: false,
  92. animation: {
  93. duration: 500,
  94. easing: "easeOutQuart",
  95. onComplete: function () {
  96. var ctx = this.chart.ctx;
  97. ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontFamily, 'normal', Chart.defaults.global.defaultFontFamily);
  98. ctx.textAlign = 'center';
  99. ctx.textBaseline = 'bottom';
  100.  
  101. this.data.datasets.forEach(function (dataset) {
  102.  
  103. for (var i = 0; i < dataset.data.length; i++) {
  104. var model = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model,
  105. total = dataset._meta[Object.keys(dataset._meta)[0]].total,
  106. mid_radius = model.innerRadius + (model.outerRadius - model.innerRadius)/2,
  107. start_angle = model.startAngle,
  108. end_angle = model.endAngle,
  109. mid_angle = start_angle + (end_angle - start_angle)/2;
  110.  
  111. var x = mid_radius * Math.cos(mid_angle);
  112. var y = mid_radius * Math.sin(mid_angle);
  113.  
  114. ctx.fillStyle = '#fff';
  115. if (i == 3){ // Darker text color for lighter background
  116. ctx.fillStyle = '#444';
  117. }
  118. var percent = String(Math.round(dataset.data[i]/total*100)) + "%";
  119. ctx.fillText(dataset.data[i], model.x + x, model.y + y);
  120. // Display percent in another line, line break doesn't work for fillText
  121. ctx.fillText(percent, model.x + x, model.y + y + 15);
  122. }
  123. });
  124. }
  125. }
  126. };
  127.  
  128. var pieChartCanvas = $("#pieChart");
  129. var pieChart = new Chart(pieChartCanvas, {
  130. type: 'pie', // or doughnut
  131. data: data,
  132. options: pieOptions
  133. });
  134.  
  135. <canvas id="pieChart" width=200 height=200></canvas>
  136.  
  137. var val = dataset.data[i];
  138. var percent = String(Math.round(val/total*100)) + "%";
  139.  
  140. if(val != 0) {
  141. ctx.fillText(dataset.data[i], model.x + x, model.y + y);
  142. // Display percent in another line, line break doesn't work for fillText
  143. ctx.fillText(percent, model.x + x, model.y + y + 15);
  144. }
  145.  
  146. var data = {
  147. datasets: [{
  148. data: [
  149. 11,
  150. 16,
  151. 7,
  152. 3,
  153. 14
  154. ],
  155. backgroundColor: [
  156. "#FF6384",
  157. "#4BC0C0",
  158. "#FFCE56",
  159. "#E7E9ED",
  160. "#36A2EB"
  161. ],
  162. label: 'My dataset' // for legend
  163. }],
  164. labels: [
  165. "Red",
  166. "Green",
  167. "Yellow",
  168. "Grey",
  169. "Blue"
  170. ]
  171. };
  172.  
  173. var pieOptions = {
  174. events: false,
  175. animation: {
  176. duration: 500,
  177. easing: "easeOutQuart",
  178. onComplete: function () {
  179. var ctx = this.chart.ctx;
  180. ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontFamily, 'normal', Chart.defaults.global.defaultFontFamily);
  181. ctx.textAlign = 'center';
  182. ctx.textBaseline = 'bottom';
  183.  
  184. this.data.datasets.forEach(function (dataset) {
  185.  
  186. for (var i = 0; i < dataset.data.length; i++) {
  187. var model = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model,
  188. total = dataset._meta[Object.keys(dataset._meta)[0]].total,
  189. mid_radius = model.innerRadius + (model.outerRadius - model.innerRadius)/2,
  190. start_angle = model.startAngle,
  191. end_angle = model.endAngle,
  192. mid_angle = start_angle + (end_angle - start_angle)/2;
  193.  
  194. var x = mid_radius * Math.cos(mid_angle);
  195. var y = mid_radius * Math.sin(mid_angle);
  196.  
  197. ctx.fillStyle = '#fff';
  198. if (i == 3){ // Darker text color for lighter background
  199. ctx.fillStyle = '#444';
  200. }
  201.  
  202. var val = dataset.data[i];
  203. var percent = String(Math.round(val/total*100)) + "%";
  204.  
  205. if(val != 0) {
  206. ctx.fillText(dataset.data[i], model.x + x, model.y + y);
  207. // Display percent in another line, line break doesn't work for fillText
  208. ctx.fillText(percent, model.x + x, model.y + y + 15);
  209. }
  210. }
  211. });
  212. }
  213. }
  214. };
  215.  
  216. var pieChartCanvas = $("#pieChart");
  217. var pieChart = new Chart(pieChartCanvas, {
  218. type: 'pie', // or doughnut
  219. data: data,
  220. options: pieOptions
  221. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement