当前位置:   article > 正文

echarts 阶梯瀑布图数据计算方式_echarts瀑布图

echarts瀑布图
  1. option = {
  2. title: {
  3. text: 'Accumulated Waterfall Chart'
  4. },
  5. tooltip: {
  6. trigger: 'axis',
  7. axisPointer: {
  8. type: 'shadow'
  9. },
  10. formatter: function (params) {
  11. let tar;
  12. if (params[1] && params[1].value !== '-') {
  13. tar = params[1];
  14. } else {
  15. tar = params[2];
  16. }
  17. return tar && tar.name + '<br/>' + tar.seriesName + ' : ' + tar.value;
  18. }
  19. },
  20. legend: {
  21. data: ['Expenses', 'Income']
  22. },
  23. grid: {
  24. left: '3%',
  25. right: '4%',
  26. bottom: '3%',
  27. containLabel: true
  28. },
  29. xAxis: {
  30. type: 'category',
  31. data: (function () {
  32. let list = [];
  33. for (let i = 1; i <= 11; i++) {
  34. list.push('Nov ' + i);
  35. }
  36. return list;
  37. })()
  38. },
  39. yAxis: {
  40. type: 'value'
  41. },
  42. series: [
  43. {
  44. name: 'Placeholder',
  45. type: 'bar',
  46. stack: 'Total',
  47. silent: true,
  48. itemStyle: {
  49. borderColor: 'transparent',
  50. color: 'transparent'
  51. },
  52. emphasis: {
  53. itemStyle: {
  54. borderColor: 'transparent',
  55. color: 'transparent'
  56. }
  57. },
  58. data: [0, 900, 1245, 1530, 1376, 1376, 1511, 1689, 1856, 1495, 1292]
  59. },
  60. {
  61. name: 'Income',
  62. type: 'bar',
  63. stack: 'Total',
  64. label: {
  65. show: true,
  66. position: 'top'
  67. },
  68. data: [900, 345, 393, '-', '-', 135, 178, 286, '-', '-', '-']
  69. },
  70. {
  71. name: 'Expenses',
  72. type: 'bar',
  73. stack: 'Total',
  74. label: {
  75. show: true,
  76. position: 'bottom'
  77. },
  78. data: ['-', '-', '-', 108, 154, '-', '-', '-', 119, 361, 203]
  79. }
  80. ]
  81. };

上面为echarts官方图表效果,和option具体内容。

使用echarts的上述图表时,关注到有三组数据,第一组数据是下图红色框框位置,第二组是蓝色柱子,第三组数据是绿色柱子

数组1: [0, 900, 1245, 1530, 1376, 1376, 1511, 1689, 1856, 1495, 1292]

数组2:[900, 345, 393, '-', '-', 135, 178, 286, '-', '-', '-']

数组3:['-', '-', '-', 108, 154, '-', '-', '-', 119, 361, 203]

此图的实际意图是,支出和收入的阶梯展示。

重点理解下:

  • 当正收入的时候 ,当前周期数据为红色区域+增长的蓝色区域(累加)。

  • 当有支出的时候,当前周期数据为红色区域(上个周期减掉支出的就是当前周期的)

  • 蓝色和绿色区域仅仅展示的是差值)

再重复一遍哈~~~

当周期为收入正增长时,在上一个柱子的顶端基础上向上绘制【增长】的数据。(此时数据的原值是红色区域加上蓝色区域)

当周期为支出负增长时,在上一个柱子的顶端开始向下绘制支出的费用。(此时数据的原值为红色区域,绿色区域是减掉的支出费用 )

在实际开发中,拿到一组数据后。计算出上面列出的三组数据。

方式一

  1. function getChartData(originData) {
  2. const placeholderData = [0]; // 占位的透明柱子即红色框框区域
  3. const data1 = [originData[0]]; // Income蓝色区域
  4. const data2 = ['-']; // Expenses绿色区域
  5. originData.forEach((item, inx) => {
  6. if (inx !== originData.length -1){
  7. const diffVal = originData[inx + 1] - item;
  8. if (diffVal > 0) {
  9. placeholderData.push(item);
  10. data1.push(diffVal);
  11. data2.push('-');
  12. } else {
  13. placeholderData.push(item + diffVal)
  14. data1.push('-');
  15. data2.push(Math.abs(diffVal));
  16. }
  17. }
  18. })
  19. return {placeholderData, data1, data2}
  20. }
  21. getChartData( [900, 1245, 1638, 1530, 1376, 1511, 1689, 1975, 1856, 1495, 1292])

方式二

  1. function getChartData(originData) {
  2. const diffData = [originData[0]]; // 计算出相临周期的差值
  3. originData.forEach((item, inx) => {
  4. if (inx !== originData.length -1){
  5. diffData.push(originData[inx + 1] - item)
  6. }
  7. })
  8. const placeholderData = []; // 占位的透明柱子即红色框框区域
  9. const data1 = []; // Income蓝色区域
  10. const data2 = []; // Expenses绿色区域
  11. diffData.forEach((dItem, dInx) => {
  12. if (dItem > 0){
  13. placeholderData.push(originData[dInx] - dItem);
  14. data1.push(dItem);
  15. data2.push('-');
  16. } else {
  17. placeholderData.push(originData[dInx])
  18. data1.push('-');
  19. data2.push(Math.abs(dItem));
  20. }
  21. })
  22. return {placeholderData, data1, data2}
  23. }
  24. getChartData( [900, 1245, 1638, 1530, 1376, 1511, 1689, 1975, 1856, 1495, 1292])

上述返回数据如下

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/318687
推荐阅读
相关标签
  

闽ICP备14008679号