combo.html 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <title>Line Chart - Combo Time Scale</title>
  5. <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>
  6. <script src="../../../dist/Chart.js"></script>
  7. <script src="../../utils.js"></script>
  8. <style>
  9. canvas {
  10. -moz-user-select: none;
  11. -webkit-user-select: none;
  12. -ms-user-select: none;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div style="width:75%;">
  18. <canvas id="canvas"></canvas>
  19. </div>
  20. <br>
  21. <br>
  22. <button id="randomizeData">Randomize Data</button>
  23. <button id="addDataset">Add Dataset</button>
  24. <button id="removeDataset">Remove Dataset</button>
  25. <button id="addData">Add Data</button>
  26. <button id="removeData">Remove Data</button>
  27. <script>
  28. var timeFormat = 'MM/DD/YYYY HH:mm';
  29. function newDateString(days) {
  30. return moment().add(days, 'd').format(timeFormat);
  31. }
  32. var color = Chart.helpers.color;
  33. var config = {
  34. type: 'bar',
  35. data: {
  36. labels: [
  37. newDateString(0),
  38. newDateString(1),
  39. newDateString(2),
  40. newDateString(3),
  41. newDateString(4),
  42. newDateString(5),
  43. newDateString(6)
  44. ],
  45. datasets: [{
  46. type: 'bar',
  47. label: 'Dataset 1',
  48. backgroundColor: color(window.chartColors.red).alpha(0.5).rgbString(),
  49. borderColor: window.chartColors.red,
  50. data: [
  51. randomScalingFactor(),
  52. randomScalingFactor(),
  53. randomScalingFactor(),
  54. randomScalingFactor(),
  55. randomScalingFactor(),
  56. randomScalingFactor(),
  57. randomScalingFactor()
  58. ],
  59. }, {
  60. type: 'bar',
  61. label: 'Dataset 2',
  62. backgroundColor: color(window.chartColors.blue).alpha(0.5).rgbString(),
  63. borderColor: window.chartColors.blue,
  64. data: [
  65. randomScalingFactor(),
  66. randomScalingFactor(),
  67. randomScalingFactor(),
  68. randomScalingFactor(),
  69. randomScalingFactor(),
  70. randomScalingFactor(),
  71. randomScalingFactor()
  72. ],
  73. }, {
  74. type: 'line',
  75. label: 'Dataset 3',
  76. backgroundColor: color(window.chartColors.green).alpha(0.5).rgbString(),
  77. borderColor: window.chartColors.green,
  78. fill: false,
  79. data: [
  80. randomScalingFactor(),
  81. randomScalingFactor(),
  82. randomScalingFactor(),
  83. randomScalingFactor(),
  84. randomScalingFactor(),
  85. randomScalingFactor(),
  86. randomScalingFactor()
  87. ],
  88. }]
  89. },
  90. options: {
  91. title: {
  92. text: 'Chart.js Combo Time Scale'
  93. },
  94. scales: {
  95. xAxes: [{
  96. type: 'time',
  97. display: true,
  98. time: {
  99. format: timeFormat,
  100. // round: 'day'
  101. }
  102. }],
  103. },
  104. }
  105. };
  106. window.onload = function() {
  107. var ctx = document.getElementById('canvas').getContext('2d');
  108. window.myLine = new Chart(ctx, config);
  109. };
  110. document.getElementById('randomizeData').addEventListener('click', function() {
  111. config.data.datasets.forEach(function(dataset) {
  112. dataset.data = dataset.data.map(function() {
  113. return randomScalingFactor();
  114. });
  115. });
  116. window.myLine.update();
  117. });
  118. var colorNames = Object.keys(window.chartColors);
  119. document.getElementById('addDataset').addEventListener('click', function() {
  120. var colorName = colorNames[config.data.datasets.length % colorNames.length];
  121. var newColor = window.chartColors[colorName];
  122. var newDataset = {
  123. label: 'Dataset ' + config.data.datasets.length,
  124. borderColor: newColor,
  125. backgroundColor: color(newColor).alpha(0.5).rgbString(),
  126. data: [],
  127. };
  128. for (var index = 0; index < config.data.labels.length; ++index) {
  129. newDataset.data.push(randomScalingFactor());
  130. }
  131. config.data.datasets.push(newDataset);
  132. window.myLine.update();
  133. });
  134. document.getElementById('addData').addEventListener('click', function() {
  135. if (config.data.datasets.length > 0) {
  136. config.data.labels.push(newDateString(config.data.labels.length));
  137. for (var index = 0; index < config.data.datasets.length; ++index) {
  138. config.data.datasets[index].data.push(randomScalingFactor());
  139. }
  140. window.myLine.update();
  141. }
  142. });
  143. document.getElementById('removeDataset').addEventListener('click', function() {
  144. config.data.datasets.splice(0, 1);
  145. window.myLine.update();
  146. });
  147. document.getElementById('removeData').addEventListener('click', function() {
  148. config.data.labels.splice(-1, 1); // remove the label first
  149. config.data.datasets.forEach(function(dataset, datasetIndex) {
  150. config.data.datasets[datasetIndex].data.pop();
  151. });
  152. window.myLine.update();
  153. });
  154. </script>
  155. </body>
  156. </html>