Echarts之饼图图例格式化

需求:
在这里插入图片描述

鼠标移入时:
在这里插入图片描述

容器:

<div id="pieChart" style="width: 700px; height: 380px; background: rgba(2, 15, 43, 0.7)"></div>

在methods中:

methods:{
   initChart() {
      let colors = ["#5599EC", "#00EA9C", "#F9CE16", "#FF913F", "#00FFF8"];
      let name = "访问来源"; //中间文字及弹窗标题
      let danwei = "个"; //单位
      let datas = [
        { value: 1048, name: "搜索引擎" },
        { value: 735, name: "直接访问" },
        { value: 580, name: "邮件营销" },
        { value: 484, name: "联盟广告" },
        { value: 300, name: "视频广告" },
      ];
      // 计算总量
      function countTotal(arr, keyName) {
        let $total = 0;
        $total = arr.reduce(function (total, currentValue, currentIndex, arr) {
          return currentValue[keyName]
            ? total * 1 + currentValue[keyName] * 1 //转换为number类型
            : total * 1;
        }, 0);
        return $total;
      }
      let total = countTotal(datas, "value");
      /**
       * @introduction 把数组中key值相同的那一项提取出来,组成一个对象
       * @description 详细描述
       * @param {参数类型} array 传入的数组 [{a:"1",b:"2"},{a:"2",b:"3"}]
       * @param {参数类型} key  属性名 a
       * @return {返回类型说明}
       * @exception [违例类型] [违例类型说明]
       */
      /* 
        { value: 1048, name: "搜索引擎" }   ==>   "搜索引擎":{ name: "搜索引擎" ,value: "1048" }
      */
      function array2obj(array, key) {
        var resObj = {};
        for (var i = 0; i < array.length; i++) {
          resObj[array[i][key]] = array[i];
        }
        return resObj;
      }
      let legendData = [];
      for (var j = 0; j < datas.length; j++) {
        var data = {
          name: datas[j].name,
          icon: "rect",
          itemWidth: 10,
          itemHeight: 10,
          textStyle: {
            rich: {
              title: {
                color: "#A0B2D3",
                fontSize: 20,
                fontWeight: "bolder",
                width: 120, //文字宽度
                align: "left",
              },
              value: {
                color: colors[j],
                fontSize: 26,
                fontWeight: "bolder",
                fontFamily: "BoldCondensed",
                width: 80, //数据宽度
                align: "left",
              },
              unit: {
                //单位
                color: "#A0B2D3",
                fontSize: 20,
                fontWeight: "bolder",
                //   padding: [0, 50, 0, 0],
              },
            },
          },
        };
        legendData.push(data);
      }
      let objData = array2obj(datas, "name");
      let option = {
        title: {
          x: "16%",
          y: "center",
          top: "40%",
          text: "{a|" + total + "}" + "{b|" + "个}" + "{c|\n}{c|" + name + "}",
          textStyle: {
            rich: {
              a: {
                fontSize: 38,
                color: "#FFFFFF",
                align: "center",
                fontFamily: "BoldCondensed",
                fontWeight: "bolder",
              },
              b: {
                fontSize: 20,
                color: "#A0B2D3",
                align: "center",
                fontWeight: "bolder",
              },
              c: {
                fontSize: 20,
                color: "#A0B2D3",
                align: "center",
                fontWeight: "bolder",
              },
            },
          },
        },

        color: colors,
        tooltip: {
          trigger: "item",
          backgroundColor: "rgba(0,0,0,0.9)",
          textStyle: {
            fontWeight: "bolder",
            fontSize: 20,
            fontFamily: "SourceHanSansCN",
          },
          // position: "right",
          formatter: function (params) {
            return (
              params.seriesName +
              "<br/>" +
              params.marker +
              '<span style="color:' +
              params.color +
              '">' +
              params.data["name"] +
              "\n" +
              params.data["value"]
                .toString()
                .replace(/(\d)(?=(?:\d{3}[+]?)+$)/g, "$1,") +
              danwei +
              "(" +
              params.percent.toFixed(2) +
              "%" +
              ")" +
              "</span>"
            );
          },
        },

        legend: {
          orient: "vertical",
          top: "center",
          left: "50%",
          itemWidth: 10,
          itemHeight: 10,
          data: legendData,
          formatter: function (name) {
            return `{title|${name}}{value|${objData[name].value
              .toString()
              .replace(/(\d)(?=(?:\d{3}[+]?)+$)/g, "$1,")}}{unit|${danwei}}`;//千分位分隔符
          },
        },
        emphasis: {},
        grid: {
          left: 0,
        },
        graphic: {
          type: "text",
          left: "24%",
          top: "60%",
        },
        series: [
          {
            name: name,
            type: "pie",
            radius: ["80%", "50%"], //图像大小
            center: ["25%", "50%"], //这个属性调整图像的位置
            hoverAnimation: false,
            label: {
              show: false,
              position: "center",
            },

            top: 5,

            labelLine: {
              show: false,
            },
            animationType: "expansion",
            data: datas,
          },
        ],
      };
      let myChart = this.$echarts.init(document.getElementById("pieChart"));
      myChart.setOption(option);
      window.addEventListener("resize", function () {
        myChart.resize();
      });
    },
}

在mounted中调用:

 mounted() {
    this.initChart();
  },

以上

要在echarts饼图中引入后端数据并显示,你可以按照以下步骤进行操作: 1. 从后端获取数据:使用后端的API或其他方式,获取饼图所需的数据。这可能涉及到发送HTTP请求,接收和解析后端返回的数据。 2. 解析数据:根据后端返回的数据格式,将其解析为echarts可识别的格式。通常,饼图需要一个包含数据项名称和值的数组。 3. 初始化echarts实例:在前端页面中引入echarts库,并根据需要创建一个容器元素,用于显示饼图。 4. 配置饼图选项:使用echarts提供的配置选项,设置饼图的样式、标题、图例等。 5. 将数据传入饼图:将解析后的数据传递给echarts实例,并将其绑定到饼图上。 6. 渲染饼图:调用echarts实例的渲染方法,将饼图显示在页面上。 下面是一个示例代码,演示了如何引入后端数据并显示饼图: ```javascript // 1. 从后端获取数据 fetch('api/data') // 假设后端API返回JSON格式的数据 .then(response => response.json()) .then(data => { // 2. 解析数据 const pieData = data.map(item => { return { name: item.name, value: item.value }; }); // 3. 初始化echarts实例 const chart = echarts.init(document.getElementById('chart-container')); // 4. 配置饼图选项 const options = { title: { text: '饼图示例', left: 'center' }, series: [{ name: '数据', type: 'pie', radius: '50%', data: pieData }] }; // 5. 将数据传入饼图 chart.setOption(options); // 6. 渲染饼图 chart.render(); }); ``` 请注意,上述代码仅为示例,实际情况可能会根据你的后端数据格式和前端框架有所不同。你需要根据自己的实际情况进行调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值