1. 程式人生 > 其它 >Echarts之內嵌圓環圖v5.1.2

Echarts之內嵌圓環圖v5.1.2

相比v4,v5有些許變動。我也沒看官方文件,就對著瀏覽器開發者工具報錯的地方一個一個調的,又綜合了別人的經驗,程式碼如下

放在drawPieAll function下

 drawPieAll() {
      // myChart paint more times, it will warn
      if (
        this.myChart != null &&
        this.myChart != "" &&
        this.myChart != undefined
      ) {
        this.myChart.dispose();
      }
      this.$nextTick(() => {
        this.myChart = echarts.init(document.getElementById("pieAll"));

        let dashedPic =
          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAM8AAAAOBAMAAAB6G1V9AAAAD1BMVEX////Kysrk5OTj4+TJycoJ0iFPAAAAG0lEQVQ4y2MYBaNgGAMTQQVFOiABhlEwCugOAMqzCykGOeENAAAAAElFTkSuQmCC";
        let color = ["#FF8700", "#ffc300", "#00e473", "#009DFF", "#a794c8"];
        let chartData = [
          { value: this.getAmount("statement", "正常"), name: "正常" },
          { value: this.getAmount("statement", "缺卡"), name: "缺卡" },
          { value: this.getAmount("statement", "早退"), name: "早退" },
          { value: this.getAmount("statement", "遲到"), name: "遲到" },
          {
            value: this.getAmount("statement", "補打卡"),
            name: "補打卡",
          },
        ];
        let arrName = [];
        let arrValue = [];
        let sum = 0;
        let pieSeries = [],
          lineYAxis = [];

        // 資料處理
        chartData.forEach((v, i) => {
          arrName.push(v.name);
          arrValue.push(v.value);
          sum = sum + v.value;
        });

        // 圖表option整理
        chartData.forEach((v, i) => {
          pieSeries.push({
            name: "考勤情況",
            type: "pie",
            clockwise: false,
            radius: [65 - i * 15 + "%", 57 - i * 15 + "%"],
            center: ["30%", "50%"],
            label: {
              show: false,
            },
            data: [
              {
                value: v.value,
                name: v.name,
              },
              {
                value: sum - v.value,
                name: "",
                itemStyle: {
                  color: "rgba(0,0,0,0)",
                },
              },
            ],
          });
          pieSeries.push({
            name: "",
            type: "pie",
            silent: true,
            z: 1,
            clockwise: false, //順時載入
            radius: [65 - i * 15 + "%", 57 - i * 15 + "%"],
            center: ["30%", "50%"],
            label: {
              show: false,
            },
            data: [
              {
                value: 7.5,
                itemStyle: {
                  color: "#E3F0FF",
                },
              },
              {
                value: 2.5,
                name: "",
                itemStyle: {
                  color: "#e3f0ff",
                },
              },
            ],
          });
          v.percent = ((v.value / sum) * 100).toFixed(1) + "%";
          lineYAxis.push({
            value: i,
          });
        });

        var option = {
          tooltip: {
            trigger: "item",
          },
          backgroundColor: "#fff",
          color: color,
          grid: {
            top: "18%",
            bottom: "220",
            left: "30%",
            containLabel: false,
          },
          yAxis: [
            {
              type: "category",
              inverse: true,
              axisLine: {
                show: false,
              },
              axisTick: {
                show: false,
              },
              axisLabel: {
                rich: {
                  circle: {
                    color: color[1],
                    padding: [0, 5],
                  },
                },
                formatter: function (params) {
                  let item = chartData[params];
                  console.log(item);
                  return (
                    "{line|}{circle|●}{name|" +
                    item.name +
                    "}{bd||}{percent|" +
                    item.percent +
                    "}"
                  );
                },
                interval: 0,
                inside: true,
                textStyle: {
                  color: "#333",
                  fontSize: 14,
                  rich: {
                    line: {
                      width: 170,
                      height: 10,
                      backgroundColor: { image: dashedPic },
                    },
                    name: {
                      color: "#666",
                      fontSize: 14,
                    },
                    bd: {
                      color: "#ccc",
                      padding: [0, 5],
                      fontSize: 14,
                    },
                    percent: {
                      color: "#333",
                      fontSize: 14,
                    },
                    value: {
                      color: "#333",
                      fontSize: 16,
                      fontWeight: 500,
                      padding: [0, 0, 0, 20],
                    },
                    unit: {
                      fontSize: 14,
                    },
                  },
                },
                show: true,
              },
              data: lineYAxis,
            },
          ],
          xAxis: [
            {
              show: false,
            },
          ],
          series: pieSeries,
        };
      this.myChart.setOption(option);
      });
}

  參考文件

Make A Pie - 3/4圓環圖