line-simple.html 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <!--
  2. 此示例下载自 https://echarts.apache.org/examples/zh/editor.html?c=line-simple&code=PYBwLglsB2AEC8sDeAoWsAeBBDEDOAXMmurGAJ4gCmRA5AMYCGYVA5sAE7m0A0J6AE2aMiAbVoBZGL1i0AKgFcqM2gHUqAlXIAWClQDEOEFQGVmphdFoBdEgF8-6cjnxFUpMpRqyAbowA2SrT2jrB4VEZUhLCi_MQegsJiAIwArAAMPLDQCv7-WQBMBQAshckAHFnJAMypVcUA7IUAbOnWoR4U1HT-ENDKcQ5x7glCYCIxALTJ6bNZmbALCw0LyTNV1W0dpF3etL39vHHoeOQAtgBGwP50YEaM0Kz-ytsn51f-JhAAXt4FmcdYAcqCYKM83ID0PRrpw6ABiVKNdIAYVa6SOCVIAHcIAIwNoiKVIZ5urIhHhtBpgpihpiICwzqDyOD4pjYFcOAIIqpcfiiNVXqQOVyOMiYRx4QBRSXNWXNDFs6H-WGychUPLALHUhJ2QYkWx2ADcQA
  3. ⚠ 请注意,该图表不是 Apache ECharts 官方示例,而是由用户代码生成的。请注意鉴别其内容。
  4. -->
  5. <!DOCTYPE html>
  6. <html lang="zh-CN" style="height: 100%">
  7. <head>
  8. <meta charset="utf-8">
  9. </head>
  10. <body style="height: 100%; margin: 0">
  11. <div id="container" style="height: 100%"></div>
  12. <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.4.1/dist/echarts.min.js"></script>
  13. <!-- Uncomment this line if you want to dataTool extension
  14. <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.4.1/dist/extension/dataTool.min.js"></script>
  15. -->
  16. <!-- Uncomment this line if you want to use gl extension
  17. <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts-gl@2/dist/echarts-gl.min.js"></script>
  18. -->
  19. <!-- Uncomment this line if you want to echarts-stat extension
  20. <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts-stat@latest/dist/ecStat.min.js"></script>
  21. -->
  22. <!-- Uncomment this line if you want to use map
  23. <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@4.9.0/map/js/china.js"></script>
  24. <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@4.9.0/map/js/world.js"></script>
  25. -->
  26. <!-- Uncomment these two lines if you want to use bmap extension
  27. <script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=YOUR_API_KEY"></script>
  28. <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.4.1/dist/extension/bmap.min.js"></script>
  29. -->
  30. <script type="text/javascript">
  31. var dom = document.getElementById('container');
  32. var myChart = echarts.init(dom, null, {
  33. renderer: 'canvas',
  34. useDirtyRect: false
  35. });
  36. var app = {};
  37. function getXAxis(arrays){
  38. let set = new Set()
  39. for(let array of arrays){
  40. for(let item of array){
  41. set.add(item.createDate)
  42. }
  43. }
  44. let newArray = new Array()
  45. set.forEach(value => {
  46. newArray.push(value);
  47. })
  48. newArray.sort((a, b) => {
  49. return a.localeCompare(b)
  50. })
  51. return newArray;
  52. }
  53. var list1 = [
  54. {value:0.3,createDate:"2023-02-10"},
  55. {value:0.4,createDate:"2023-02-15"},
  56. {value:0.7,createDate:"2023-02-18"},
  57. {value:0.5,createDate:"2023-02-20"},
  58. ]
  59. var list2 = [
  60. {value:0.5,createDate:"2023-02-10"},
  61. {value:0.6,createDate:"2023-02-15"},
  62. {value:0.8,createDate:"2023-02-18"},
  63. {value:0.4,createDate:"2023-02-20"},
  64. ]
  65. var list3 = [
  66. {value:-0.2,createDate:"2023-02-09"},
  67. {value:-0.2,createDate:"2023-02-10"},
  68. {value:-0.2,createDate:"2023-02-11"},
  69. {value:-0.2,createDate:"2023-02-15"},
  70. {value:-0.2,createDate:"2023-02-16"},
  71. {value:-0.2,createDate:"2023-02-17"},
  72. {value:-0.2,createDate:"2023-02-18"},
  73. {value:-0.2,createDate:"2023-02-21"},
  74. ]
  75. var list4 = [
  76. {value:-0.5,createDate:"2023-02-09"},
  77. {value:-0.5,createDate:"2023-02-11"},
  78. {value:-0.5,createDate:"2023-02-12"},
  79. {value:-0.5,createDate:"2023-02-16"},
  80. {value:-0.5,createDate:"2023-02-17"},
  81. {value:-0.5,createDate:"2023-02-18"},
  82. {value:-0.5,createDate:"2023-02-19"},
  83. {value:-0.5,createDate:"2023-02-22"},
  84. ]
  85. let xAxisData = getXAxis([list1,list2,list3,list4]);
  86. function getSeries(arrays){
  87. let series = new Array();
  88. for(let array of arrays){
  89. if(array[0].value < 0){
  90. let points = createPoints();
  91. points.data = fillByCreateDate(xAxisData, array, null)
  92. series.push(points);
  93. }else{
  94. let line = createLine();
  95. line.data = fillByCreateDate(xAxisData, array, "mid")
  96. series.push(line)
  97. }
  98. }
  99. return series;
  100. }
  101. function createPoints(){
  102. return {
  103. data:[],
  104. type: 'line',
  105. symbol: 'triangle',
  106. symbolSize: 20,
  107. lineStyle: {
  108. color: '#5470C600',
  109. width: 4,
  110. type: 'dashed'
  111. },
  112. itemStyle: {
  113. borderWidth: 3,
  114. borderColor: '#EE6666',
  115. color: 'yellow'
  116. }
  117. }
  118. }
  119. function createLine(){
  120. return {
  121. data: [],
  122. type: 'line',
  123. symbol: function(array,obj){
  124. if(!obj.data.mid){
  125. return "emptyCircle";
  126. }else{
  127. return "none"
  128. }
  129. },
  130. itemStyle: {
  131. borderWidth:0,
  132. borderColor: '#EE666600',
  133. borderJoin:"miter",
  134. color: function(obj){
  135. if(!obj.data.mid){
  136. return obj.color;
  137. }else{
  138. return "none"
  139. }
  140. },
  141. borderWidth: function(obj){
  142. console.log(obj)
  143. }
  144. }
  145. }
  146. }
  147. function fillByCreateDate(createDates, datas, filler){
  148. let res = new Array()
  149. let j=0;
  150. for(let i=0;i<createDates.length;i++){
  151. if(!datas[j]){
  152. res.push({value:null})
  153. }else if(createDates[i] == datas[j].createDate){
  154. res.push(datas[j++])
  155. }else{
  156. res.push({value:filler,mid:'mid'});
  157. }
  158. }
  159. //处理中间值
  160. if(filler == "mid"){
  161. insertMid(res)
  162. }
  163. return res;
  164. }
  165. function insertMid(datas){
  166. let before = null;
  167. let n = 0;
  168. for(let i=0;i<datas.length;i++){
  169. if(!before && datas[i].value === "mid"){
  170. datas[i] = {value:null};
  171. continue;
  172. }
  173. if(!before){
  174. before = datas[i].value;
  175. continue;
  176. }
  177. if(datas[i].value === "mid"){
  178. n++;
  179. }else{
  180. if(n > 0){
  181. insertMid2(before, datas[i].value, datas, i , n)
  182. n = 0;
  183. }
  184. before = datas[i].value;
  185. }
  186. }
  187. }
  188. function insertMid2(before, alter, datas, i , n){
  189. let f = (alter - before) / (n + 1);
  190. for(let j = i-n; j < i;j++){
  191. datas[j].value = before + f;
  192. before = datas[j].value;
  193. }
  194. }
  195. let series = getSeries([list1,list2,list3,list4]);
  196. console.log(series)
  197. var option = {
  198. xAxis: {
  199. type: 'category',
  200. data: xAxisData
  201. },
  202. yAxis: {
  203. type: 'value'
  204. },
  205. series: series
  206. };
  207. if (option && typeof option === 'object') {
  208. myChart.setOption(option);
  209. }
  210. window.addEventListener('resize', myChart.resize);
  211. </script>
  212. </body>
  213. </html>