heatmap-large.html 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <script src="esl.js"></script>
  5. <script src="config.js"></script>
  6. <script src="lib/perlin.js"></script>
  7. <meta name="viewport" content="width=device-width, initial-scale=1" />
  8. </head>
  9. <body>
  10. <style>
  11. html, body, #main {
  12. width: 100%;
  13. height: 100%;
  14. margin: 0;
  15. }
  16. </style>
  17. <div id="main"></div>
  18. <script>
  19. require([
  20. 'echarts',
  21. 'echarts/chart/heatmap',
  22. 'echarts/chart/scatter',
  23. 'echarts/component/legend',
  24. 'echarts/component/visualMap',
  25. 'echarts/component/grid',
  26. 'echarts/component/polar',
  27. 'echarts/component/tooltip'
  28. ], function (echarts) {
  29. var chart = echarts.init(document.getElementById('main'));
  30. // function normalDist(theta, x) {
  31. // return 1 / (theta * Math.sqrt(2 * Math.PI)) * Math.exp(- x * x / 2 / theta / theta);
  32. // }
  33. var xData = [];
  34. var yData = [];
  35. noise.seed(Math.random());
  36. function generateData(theta, min, max) {
  37. var data = [];
  38. for (var i = 0; i <= 100; i++) {
  39. for (var j = 0; j <= 100; j++) {
  40. // var x = (max - min) * i / 200 + min;
  41. // var y = (max - min) * j / 100 + min;
  42. data.push([i, j, noise.perlin2(i / 40, j / 20) + 0.5]);
  43. // data.push([i, j, normalDist(theta, x) * normalDist(theta, y)]);
  44. }
  45. yData.push(i);
  46. xData.push(i);
  47. }
  48. return data;
  49. }
  50. var data = generateData(2, -5, 5);
  51. // console.profile('render');
  52. console.time('render');
  53. chart.setOption({
  54. tooltip: {},
  55. xAxis: {
  56. type: 'category',
  57. data: xData
  58. },
  59. yAxis: {
  60. type: 'category',
  61. data: yData
  62. },
  63. visualMap: {
  64. // type: 'piecewise',
  65. min: 0,
  66. max: 1,
  67. calculable: true,
  68. realtime: false,
  69. splitNumber: 8,
  70. inRange: {
  71. color: ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
  72. }
  73. },
  74. series: [{
  75. name: 'Gaussian',
  76. type: 'heatmap',
  77. data: data,
  78. itemStyle: {
  79. emphasis: {
  80. borderColor: '#333',
  81. borderWidth: 2
  82. }
  83. },
  84. progressive: 1000,
  85. // silent: true,
  86. // progressive: 0,
  87. // progressiveThreshold: 30000,
  88. animation: false
  89. }]
  90. });
  91. console.timeEnd('render');
  92. // console.profileEnd('render');
  93. });
  94. </script>
  95. </body>
  96. </html>