clustering_animation.html 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset='utf-8'>
  5. <meta name="viewport" content="width=device-width, initial-scale=1" />
  6. <script src="../lib/esl.js"></script>
  7. <script src="../lib/config.js"></script>
  8. <script src="../lib/jquery.min.js"></script>
  9. </head>
  10. <body>
  11. <style>
  12. html, body, #main {
  13. width: 100%;
  14. height: 100%;
  15. margin: 0;
  16. padding: 0;
  17. }
  18. </style>
  19. <div id="main"></div>
  20. <script>
  21. require([
  22. 'echarts',
  23. 'ecStat'
  24. ], function (echarts, ecStat) {
  25. var chart = echarts.init(document.getElementById('main'));
  26. $.getJSON('../data/clustering_dataset2.json')
  27. .done(function (data) {
  28. var clusterNumber = 6;
  29. var step = ecStat.clustering.hierarchicalKMeans(data, clusterNumber, true);
  30. var result;
  31. var option = {
  32. timeline: {
  33. top: 'center',
  34. right: 50,
  35. height: 300,
  36. width: 10,
  37. inverse: true,
  38. playInterval: 2500,
  39. symbol: 'none',
  40. orient: 'vertical',
  41. axisType: 'category',
  42. autoPlay: true,
  43. label: {normal: {show: false}},
  44. data: []
  45. },
  46. baseOption: {
  47. xAxis: {
  48. type: 'value'
  49. },
  50. yAxis: {
  51. type: 'value'
  52. },
  53. series: [{
  54. type: 'scatter'
  55. }]
  56. },
  57. options: []
  58. };
  59. for (var i = 0; !(result = step.next()).isEnd; i++) {
  60. option.options.push(getOption(result, clusterNumber));
  61. option.timeline.data.push(i + '');
  62. }
  63. chart.setOption(option);
  64. function getOption(result, k) {
  65. var clusterAssment = result.clusterAssment;
  66. var centroids = result.centroids;
  67. var ptsInCluster = result.pointsInCluster;
  68. var color = ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83', '#ca8622', '#bda29a','#6e7074', '#546570', '#c4ccd3'];
  69. var series = [];
  70. for (i = 0; i < k; i++) {
  71. series.push({
  72. name: 'scatter' + i,
  73. type: 'scatter',
  74. label: {
  75. emphasis: {
  76. show: true
  77. }
  78. },
  79. animation: false,
  80. data: ptsInCluster[i],
  81. markPoint: {
  82. symbolSize: 29,
  83. label: {
  84. normal: {
  85. show: false
  86. },
  87. emphasis: {
  88. show: true,
  89. position: 'top',
  90. formatter: function (params) {
  91. return Math.round(params.data.coord[0] * 100) / 100 + ' '
  92. + Math.round(params.data.coord[1] * 100) / 100 + ' ';
  93. },
  94. textStyle: {
  95. color: '#000'
  96. }
  97. }
  98. },
  99. itemStyle: {
  100. normal: {
  101. opacity: 0.7
  102. }
  103. },
  104. data: [{
  105. coord: centroids[i]
  106. }]
  107. }
  108. });
  109. }
  110. return {
  111. tooltip: {
  112. trigger: 'axis',
  113. axisPointer: {
  114. type: 'cross'
  115. }
  116. },
  117. series: series,
  118. color: color
  119. };
  120. }
  121. });
  122. });
  123. </script>
  124. </body>
  125. </html>