dataset.html 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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="../../dist/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: 'Scriptable',
  28. name: 'Dataset',
  29. desc: 'Labels are positionned outside a filled region between 2 datasets.'
  30. };
  31. </script>
  32. <script id="script-init">
  33. var DATA_COUNT = 12;
  34. var labels = [];
  35. Samples.srand(26);
  36. for (var i = 0; i < DATA_COUNT; ++i) {
  37. labels.push('' + i);
  38. }
  39. Chart.helpers.merge(Chart.defaults.global, {
  40. aspectRatio: 4/3,
  41. tooltips: false,
  42. layout: {
  43. padding: {
  44. top: 32,
  45. right: 24,
  46. bottom: 32,
  47. left: 0
  48. }
  49. },
  50. elements: {
  51. line: {
  52. borderWidth: 2,
  53. fill: false
  54. }
  55. },
  56. plugins: {
  57. legend: false,
  58. title: false
  59. }
  60. });
  61. </script>
  62. <script id="script-construct">
  63. var chart = new Chart('chart-0', {
  64. type: 'line',
  65. data: {
  66. labels: labels,
  67. datasets: [{
  68. backgroundColor: Samples.transparentize(Samples.color(0)),
  69. pointBackgroundColor: Samples.color(1),
  70. borderColor: Samples.color(1),
  71. data: Samples.numbers({
  72. count: DATA_COUNT,
  73. min: -25,
  74. max: 25
  75. }),
  76. fill: '+1',
  77. }, {
  78. pointBackgroundColor: Samples.color(6),
  79. borderColor: Samples.color(6),
  80. data: Samples.numbers({
  81. count: DATA_COUNT,
  82. min: -100,
  83. max: 100
  84. })
  85. }]
  86. },
  87. options: {
  88. plugins: {
  89. datalabels: {
  90. align: function(context) {
  91. var index = context.dataIndex;
  92. var datasets = context.chart.data.datasets;
  93. var v0 = datasets[0].data[index];
  94. var v1 = datasets[1].data[index];
  95. var invert = v0 - v1 > 0;
  96. return context.datasetIndex === 0 ?
  97. invert ? 'end' : 'start' :
  98. invert ? 'start' : 'end';
  99. },
  100. backgroundColor: function(context) {
  101. return context.dataset.borderColor;
  102. },
  103. borderRadius: 4,
  104. color: 'white',
  105. font: {
  106. size: 11,
  107. weight: 600
  108. },
  109. offset: 8,
  110. formatter: Math.round
  111. }
  112. }
  113. }
  114. });
  115. </script>
  116. <script id="script-actions">
  117. function randomize() {
  118. chart.data.datasets.forEach(function(dataset, i) {
  119. var color = Samples.color();
  120. dataset.borderColor = color;
  121. dataset.pointBackgroundColor = color;
  122. dataset.data = dataset.data.map(function(value) {
  123. return Samples.rand(i % 2 ? -100 : -25, i % 2 ? 100 : 25);
  124. });
  125. });
  126. chart.update();
  127. }
  128. function addData() {
  129. chart.data.labels.push(chart.data.labels.length);
  130. chart.data.datasets.forEach(function(dataset, i) {
  131. dataset.data.push(Samples.rand(i % 2 ? -100 : -25, i % 2 ? 100 : 25));
  132. });
  133. chart.update();
  134. }
  135. function removeData() {
  136. chart.data.labels.shift();
  137. chart.data.datasets.forEach(function(dataset, i) {
  138. dataset.data.shift();
  139. });
  140. chart.update();
  141. }
  142. </script>
  143. </body>
  144. </html>