叠加柱状图

描述:当前是关于Echarts图表中的 柱状图 示例。
 
                let barColor = ["#745ffd", "#338cf9", "#e0b932", "#e03532"]

  let oldData = [
        {
          clrDate: "2020",
          amount: 371,
          currencyType: "计划",
          currencyCode: "计划"
        },
        {
          clrDate: "2020",
          amount: 324,
          currencyType: "合并",
          currencyCode: "预测"
        },
        {
          clrDate: "2020",
          amount: 0,
          currencyType: "合并",
          currencyCode: "黄色"
        },
        {
          clrDate: "2020",
          amount: 0,
          currencyType: "合并",
          currencyCode: "红色"
        },

        {
          clrDate: "2021",
          amount: 385,
          currencyType: "计划",
          currencyCode: "计划"
        },
        {
          clrDate: "2021",
          amount: 346,
          currencyType: "合并",
          currencyCode: "预测"
        },
        {
          clrDate: "2021",
          amount: 20,
          currencyType: "合并",
          currencyCode: "黄色"
        },
        {
          clrDate: "2021",
          amount: 0,
          currencyType: "合并",
          currencyCode: "红色"
        },
        {
          clrDate: "2022",
          amount: 392,
          currencyType: "计划",
          currencyCode: "计划"
        },
        {
          clrDate: "2022",
          amount: 332,
          currencyType: "合并",
          currencyCode: "预测"
        },
        {
          clrDate: "2022",
          amount: 0,
          currencyType: "合并",
          currencyCode: "黄色"
        },
        {
          clrDate: "2022",
          amount: 0,
          currencyType: "合并",
          currencyCode: "红色"
        }
      ];

      let dateArr = [],
        currentTypeArr = [],
        currencyCodeArr = [],
        seriesArr;

      oldData.forEach(item => {
        if (dateArr.indexOf(item.clrDate) < 0) {
          dateArr.push(item.clrDate);
        }
        if (currentTypeArr.indexOf(item.currencyType) < 0) {
          currentTypeArr.push(item.currencyType);
        }
        if (currencyCodeArr.indexOf(item.currencyCode) < 0) {
          currencyCodeArr.push(item.currencyCode);
        }
      });

      seriesArr = currencyCodeArr.map(currencyCode => {
        return {
          name: currencyCode,
          stack: "",
          type: "bar",
          data: [],
          itemStyle: {
            color: "#fff"
          }
        };
      });

      for (var i = 0; i < seriesArr.length; i++) {
        // stack 名字一样的会叠加
        if (seriesArr[i].name == "计划") {
          seriesArr[i].stack = "计划";
        } else {
          seriesArr[i].stack = "合并";
        }

        seriesArr[i].itemStyle["color"] = barColor[i];
        for (var j = 0; j < oldData.length; j++) {
          for (var k = 0; k < dateArr.length; k++) {
            if (
              seriesArr[i].name == oldData[j].currencyCode &&
              seriesArr[i].stack == oldData[j].currencyType &&
              dateArr[k] == oldData[j].clrDate
            ) {
              seriesArr[i].data[k] = oldData[j].amount;
            }
          }
        }
      }
     option = {
        tooltip: {
          trigger: "axis",
          axisPointer: {
            type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
          },
          textStyle: {
            rich: {}
          },
          formatter: function(params, ticket, callback) {
            var htmlStr = "";
            for (var i = 0; i < params.length; i++) {
              if (
                params[i].seriesName != "黄色" &&
                params[i].seriesName != "红色"
              ) {
                var param = params[i];
                var xName = param.name; //x轴的名称
                var seriesName = param.seriesName; //图例名称

                var value = param.value; //y轴值
                if (seriesName == "预测") {
                  value = value + 20;
                }
                var color = param.color; //图例颜色

                // 预测显示
                if (i === 0) {
                  htmlStr += xName + "<br/>"; //x轴的名称
                  htmlStr += "<div>";
                  htmlStr += `<span style="display:inline-block;margin-right:5px;height:10px;width:10px;border-radius:3px;background:${color};"></span>`;
                  htmlStr += seriesName + ":" + value;
                  htmlStr += "</div>";
                } else {
                  htmlStr += "<div>";
                  htmlStr += `<span style="display:inline-block;margin-right:5px;height:10px;width:10px;border-radius:3px;background:${color};"></span>`;
                  htmlStr += seriesName + ":" + value;
                  htmlStr += "</div>";
                }
              }
            }
            return htmlStr;
          }
        },
        legend: {
          type: "scroll",
          data: [currencyCodeArr[0], currencyCodeArr[1]],
          bottom: 0,
          itemWidth: 14,
          textStyle: {
            color: "#626262",
            fontSize: 14
          }
        },
        grid: {
          top: "10%",
          bottom: "20%",
          left: "3%",
          right: "4%",
          containLabel: true
        },
        xAxis: [
          {
            type: "category",
            data: dateArr,
            axisLabel: {
              color: "#626262"
            },
            axisTick: {
              show: false
            },
            axisLine: {
              show: false
            }
          }
        ],
        yAxis: [
          {
            type: "value",
            axisTick: {
              show: false
            },
            axisLabel: {
              color: "#626262"
            },
            axisLine: {
              show: false
            },
            splitLine: {
              show: true,
              lineStyle: {
                color: "#333",
                type: "dashed"
              }
            }
          }
        ],
        series: seriesArr
      };