line.html 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <title>Line Chart</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 newDate(days) {
  30. return moment().add(days, 'd').toDate();
  31. }
  32. function newDateString(days) {
  33. return moment().add(days, 'd').format(timeFormat);
  34. }
  35. var color = Chart.helpers.color;
  36. var config = {
  37. type: 'line',
  38. data: {
  39. labels: [ // Date Objects
  40. newDate(0),
  41. newDate(1),
  42. newDate(2),
  43. newDate(3),
  44. newDate(4),
  45. newDate(5),
  46. newDate(6)
  47. ],
  48. datasets: [{
  49. label: 'My First dataset',
  50. backgroundColor: color(window.chartColors.red).alpha(0.5).rgbString(),
  51. borderColor: window.chartColors.red,
  52. fill: false,
  53. data: [
  54. randomScalingFactor(),
  55. randomScalingFactor(),
  56. randomScalingFactor(),
  57. randomScalingFactor(),
  58. randomScalingFactor(),
  59. randomScalingFactor(),
  60. randomScalingFactor()
  61. ],
  62. }, {
  63. label: 'My Second dataset',
  64. backgroundColor: color(window.chartColors.blue).alpha(0.5).rgbString(),
  65. borderColor: window.chartColors.blue,
  66. fill: false,
  67. data: [
  68. randomScalingFactor(),
  69. randomScalingFactor(),
  70. randomScalingFactor(),
  71. randomScalingFactor(),
  72. randomScalingFactor(),
  73. randomScalingFactor(),
  74. randomScalingFactor()
  75. ],
  76. }, {
  77. label: 'Dataset with point data',
  78. backgroundColor: color(window.chartColors.green).alpha(0.5).rgbString(),
  79. borderColor: window.chartColors.green,
  80. fill: false,
  81. data: [{
  82. x: newDateString(0),
  83. y: randomScalingFactor()
  84. }, {
  85. x: newDateString(5),
  86. y: randomScalingFactor()
  87. }, {
  88. x: newDateString(7),
  89. y: randomScalingFactor()
  90. }, {
  91. x: newDateString(15),
  92. y: randomScalingFactor()
  93. }],
  94. }]
  95. },
  96. options: {
  97. title: {
  98. text: 'Chart.js Time Scale'
  99. },
  100. scales: {
  101. xAxes: [{
  102. type: 'time',
  103. time: {
  104. format: timeFormat,
  105. // round: 'day'
  106. tooltipFormat: 'll HH:mm'
  107. },
  108. scaleLabel: {
  109. display: true,
  110. labelString: 'Date'
  111. }
  112. }],
  113. yAxes: [{
  114. scaleLabel: {
  115. display: true,
  116. labelString: 'value'
  117. }
  118. }]
  119. },
  120. }
  121. };
  122. window.onload = function() {
  123. var ctx = document.getElementById('canvas').getContext('2d');
  124. window.myLine = new Chart(ctx, config);
  125. };
  126. document.getElementById('randomizeData').addEventListener('click', function() {
  127. config.data.datasets.forEach(function(dataset) {
  128. dataset.data.forEach(function(dataObj, j) {
  129. if (typeof dataObj === 'object') {
  130. dataObj.y = randomScalingFactor();
  131. } else {
  132. dataset.data[j] = randomScalingFactor();
  133. }
  134. });
  135. });
  136. window.myLine.update();
  137. });
  138. var colorNames = Object.keys(window.chartColors);
  139. document.getElementById('addDataset').addEventListener('click', function() {
  140. var colorName = colorNames[config.data.datasets.length % colorNames.length];
  141. var newColor = window.chartColors[colorName];
  142. var newDataset = {
  143. label: 'Dataset ' + config.data.datasets.length,
  144. borderColor: newColor,
  145. backgroundColor: color(newColor).alpha(0.5).rgbString(),
  146. data: [],
  147. };
  148. for (var index = 0; index < config.data.labels.length; ++index) {
  149. newDataset.data.push(randomScalingFactor());
  150. }
  151. config.data.datasets.push(newDataset);
  152. window.myLine.update();
  153. });
  154. document.getElementById('addData').addEventListener('click', function() {
  155. if (config.data.datasets.length > 0) {
  156. config.data.labels.push(newDate(config.data.labels.length));
  157. for (var index = 0; index < config.data.datasets.length; ++index) {
  158. if (typeof config.data.datasets[index].data[0] === 'object') {
  159. config.data.datasets[index].data.push({
  160. x: newDate(config.data.datasets[index].data.length),
  161. y: randomScalingFactor(),
  162. });
  163. } else {
  164. config.data.datasets[index].data.push(randomScalingFactor());
  165. }
  166. }
  167. window.myLine.update();
  168. }
  169. });
  170. document.getElementById('removeDataset').addEventListener('click', function() {
  171. config.data.datasets.splice(0, 1);
  172. window.myLine.update();
  173. });
  174. document.getElementById('removeData').addEventListener('click', function() {
  175. config.data.labels.splice(-1, 1); // remove the label first
  176. config.data.datasets.forEach(function(dataset) {
  177. dataset.data.pop();
  178. });
  179. window.myLine.update();
  180. });
  181. </script>
  182. </body>
  183. </html>