doughnut.html 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <!DOCTYPE html>
  2. <html lang="en-US">
  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">
  7. <link rel="stylesheet" type="text/css" href="../style.css">
  8. <link rel="icon" type="image/ico" href="../favicon.ico">
  9. <script src="https://cdn.jsdelivr.net/npm/chart.js@2.7.0/dist/Chart.min.js"></script>
  10. <script src="../../chartjs-plugin-datalabels.js"></script>
  11. <script src="../utils.js"></script>
  12. </head>
  13. <body>
  14. <div id="side">
  15. <div id="header"></div>
  16. <div id="actions">
  17. <button onclick="randomize(this)">Randomize</button>
  18. <button onclick="addData(this)">Add Data</button>
  19. <button onclick="removeData(this)">Remove Data</button>
  20. </div>
  21. </div>
  22. <div id="charts">
  23. <div class="wrapper"><canvas id="chart-0"></canvas></div>
  24. </div>
  25. <script>
  26. var SAMPLE_INFO = {
  27. group: 'Charts',
  28. name: 'Doughnut',
  29. };
  30. </script>
  31. <script id="script-init">
  32. var DATA_COUNT = 10;
  33. var labels = [];
  34. Samples.srand(4);
  35. for (var i = 0; i < DATA_COUNT; ++i) {
  36. labels.push('' + i);
  37. }
  38. Chart.helpers.merge(Chart.defaults.global, {
  39. maintainAspectRatio: false,
  40. tooltips: false,
  41. layout: {
  42. padding: 32
  43. },
  44. elements: {
  45. line: {
  46. fill: false
  47. },
  48. point: {
  49. hoverRadius: 7,
  50. radius: 5
  51. }
  52. },
  53. plugins: {
  54. legend: false,
  55. title: false
  56. }
  57. });
  58. </script>
  59. <script id="script-construct">
  60. var chart = new Chart('chart-0', {
  61. type: 'doughnut',
  62. data: {
  63. labels: labels,
  64. datasets: [{
  65. backgroundColor: Samples.colors({
  66. color: Samples.color(0),
  67. count: DATA_COUNT
  68. }),
  69. data: Samples.numbers({
  70. count: DATA_COUNT,
  71. min: 0,
  72. max: 100
  73. }),
  74. datalabels: {
  75. anchor: 'end'
  76. }
  77. }, {
  78. backgroundColor: Samples.colors({
  79. color: Samples.color(1),
  80. count: DATA_COUNT
  81. }),
  82. data: Samples.numbers({
  83. count: DATA_COUNT,
  84. min: 0,
  85. max: 100
  86. }),
  87. datalabels: {
  88. anchor: 'center',
  89. backgroundColor: null,
  90. borderWidth: 0
  91. }
  92. }, {
  93. backgroundColor: Samples.colors({
  94. color: Samples.color(2),
  95. count: DATA_COUNT
  96. }),
  97. data: Samples.numbers({
  98. count: DATA_COUNT,
  99. min: 0,
  100. max: 100
  101. }),
  102. datalabels: {
  103. anchor: 'start'
  104. }
  105. }]
  106. },
  107. options: {
  108. plugins: {
  109. datalabels: {
  110. backgroundColor: function(context) {
  111. return context.dataset.backgroundColor;
  112. },
  113. borderColor: 'white',
  114. borderRadius: 25,
  115. borderWidth: 2,
  116. color: 'white',
  117. display: function(context) {
  118. var dataset = context.dataset;
  119. var count = dataset.data.length;
  120. var value = dataset.data[context.dataIndex];
  121. return value > count * 1.5;
  122. },
  123. font: {
  124. weight: 'bold'
  125. },
  126. formatter: Math.round
  127. }
  128. }
  129. }
  130. });
  131. </script>
  132. <script id="script-actions">
  133. function randomize() {
  134. chart.data.datasets.forEach(function(dataset, i) {
  135. dataset.backgroundColor = dataset.data.map(function(value) {
  136. return Samples.color();
  137. });
  138. dataset.data = dataset.data.map(function(value) {
  139. return Samples.rand(0, 100);
  140. });
  141. });
  142. chart.update();
  143. }
  144. function addData() {
  145. chart.data.labels.push(chart.data.labels.length);
  146. chart.data.datasets.forEach(function(dataset, i) {
  147. dataset.backgroundColor.push(Samples.color());
  148. dataset.data.push(Samples.rand(0, 100));
  149. });
  150. chart.update();
  151. }
  152. function removeData() {
  153. chart.data.labels.shift();
  154. chart.data.datasets.forEach(function(dataset, i) {
  155. dataset.backgroundColor.shift();
  156. dataset.data.shift();
  157. });
  158. chart.update();
  159. }
  160. </script>
  161. </body>
  162. </html>