bubble.html 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. <title>Scriptable > Bubble | Chart.js sample</title>
  8. <link rel="stylesheet" type="text/css" href="../style.css">
  9. <script src="../../dist/Chart.js"></script>
  10. <script src="../utils.js"></script>
  11. </head>
  12. <body>
  13. <div class="content">
  14. <div class="wrapper"><canvas id="chart-0"></canvas></div>
  15. <div class="toolbar">
  16. <button onclick="randomize(this)">Randomize</button>
  17. <button onclick="addDataset(this)">Add Dataset</button>
  18. <button onclick="removeDataset(this)">Remove Dataset</button>
  19. </div>
  20. </div>
  21. <script>
  22. var DATA_COUNT = 16;
  23. var MIN_XY = -150;
  24. var MAX_XY = 100;
  25. var utils = Samples.utils;
  26. utils.srand(110);
  27. function colorize(opaque, context) {
  28. var value = context.dataset.data[context.dataIndex];
  29. var x = value.x / 100;
  30. var y = value.y / 100;
  31. var r = x < 0 && y < 0 ? 250 : x < 0 ? 150 : y < 0 ? 50 : 0;
  32. var g = x < 0 && y < 0 ? 0 : x < 0 ? 50 : y < 0 ? 150 : 250;
  33. var b = x < 0 && y < 0 ? 0 : x > 0 && y > 0 ? 250 : 150;
  34. var a = opaque ? 1 : 0.5 * value.v / 1000;
  35. return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
  36. }
  37. function generateData() {
  38. var data = [];
  39. var i;
  40. for (i = 0; i < DATA_COUNT; ++i) {
  41. data.push({
  42. x: utils.rand(MIN_XY, MAX_XY),
  43. y: utils.rand(MIN_XY, MAX_XY),
  44. v: utils.rand(0, 1000)
  45. });
  46. }
  47. return data;
  48. }
  49. var data = {
  50. datasets: [{
  51. data: generateData()
  52. }, {
  53. data: generateData()
  54. }]
  55. };
  56. var options = {
  57. aspectRatio: 1,
  58. legend: false,
  59. tooltips: false,
  60. elements: {
  61. point: {
  62. backgroundColor: colorize.bind(null, false),
  63. borderColor: colorize.bind(null, true),
  64. borderWidth: function(context) {
  65. return Math.min(Math.max(1, context.datasetIndex + 1), 8);
  66. },
  67. hoverBackgroundColor: 'transparent',
  68. hoverBorderColor: function(context) {
  69. return utils.color(context.datasetIndex);
  70. },
  71. hoverBorderWidth: function(context) {
  72. var value = context.dataset.data[context.dataIndex];
  73. return Math.round(8 * value.v / 1000);
  74. },
  75. radius: function(context) {
  76. var value = context.dataset.data[context.dataIndex];
  77. var size = context.chart.width;
  78. var base = Math.abs(value.v) / 1000;
  79. return (size / 24) * base;
  80. }
  81. }
  82. }
  83. };
  84. var chart = new Chart('chart-0', {
  85. type: 'bubble',
  86. data: data,
  87. options: options
  88. });
  89. // eslint-disable-next-line no-unused-vars
  90. function randomize() {
  91. chart.data.datasets.forEach(function(dataset) {
  92. dataset.data = generateData();
  93. });
  94. chart.update();
  95. }
  96. // eslint-disable-next-line no-unused-vars
  97. function addDataset() {
  98. chart.data.datasets.push({
  99. data: generateData()
  100. });
  101. chart.update();
  102. }
  103. // eslint-disable-next-line no-unused-vars
  104. function removeDataset() {
  105. chart.data.datasets.shift();
  106. chart.update();
  107. }
  108. </script>
  109. </body>
  110. </html>