关于echarts:echart的环形图表中legend配置项中存在多个重复数据页面展示的时候合并为一个数据展示问题

47次阅读

共计 2510 个字符,预计需要花费 7 分钟才能阅读完成。

我的项目场景:

echart 的环形图表中 legend 配置项中存在多个反复数据,页面展现的时候合并为一个数据展现了

例如:多个同名业务类型,然而 key 值不同,须要将所有业务类型都展现。


问题形容

开发中遇到业务类型名称不惟一状况,存在多个业务类型同名然而 key 值不同,此处多个业务类型应该通过不同色彩将所有类型名都展现,然而理论展现是同名业务类型合并为同一名称,并且色彩雷同。

例如:
图表初始化数据代码:

drawChannelChart() {
      // 基于筹备好的 dom,初始化 echarts 实例
      this.channelChart = echarts.init(document.getElementById("channelChart"));
      // 绘制图表
      this.channelChart.setOption({
        title: {
          text: "总数",
          // 副标题
          subtext: this.channelTotal || "0",
          // 主副标题间距
          itemGap: 15,
          x: "center",
          y: "center",
          // x:'17%',
          //  y:'12%',
          top: "170",
          // 主题目款式
          textStyle: {
            fontSize: "18",
            color: "#CCCCCC"
          },
          // 副标题款式
          subtextStyle: {
            fontSize: "35",
            fontWeight: "800",
            color: "#555"
          }
        },
        tooltip: {trigger: "item"},
        legend: {
          top: "95%",
          left: "center",
          // left: '10%',
          icon: "circle",
        },
        series: [
          {
            name: "",
            type: "pie",
            radius: ["40%", "70%"],
            avoidLabelOverlap: false,
            label: {
              show: false,
              position: "center"
            },
            emphasis: {
              label: {
                show: false,
                fontSize: "40",
                fontWeight: "bold"
              }
            },
            labelLine: {show: false},
            data:  [
                {
                    "key": "1",
                    "name": "超高清",
                    "value": 3
                },
                {
                    "key": "2",
                    "name": "低时延",
                    "value": 1
                },
                {
                    "key": "3",
                    "name": "低时延",
                    "value": 2
                },
            ]
          }
        ]
      });
    },

起因剖析:

需要要求,之前没有留神到这方面的问题。


解决方案:

通过 legend 和 tooltip 属性的 formatter 属性值来批改对雷同 name 值数据的展现问题。

首先在获取到数据的时候,对数据进行解决

channelTypes.forEach((element, i) => {let obj = {};
   obj.value = element.num || 0;
   obj.name = element.value+ element.key;// 应用原来的 name 值 +key 值作为 name 惟一的标识
   obj.text = element.value;// 预计的展现名称
   obj.key = element.key;
   this.channelData.push(obj);
 });

其次初始化图表设置

drawChannelChart() {
    // 基于筹备好的 dom,初始化 echarts 实例
    this.channelChart = echarts.init(document.getElementById("channelChart"));
    // 绘制图表
    this.channelChart.setOption({
      title: {
        text: "总数",
        // 副标题
        subtext: this.channelTotal || "0",
        // 主副标题间距
        itemGap: 15,
        x: "center",
        y: "center",
        // x:'17%',
        //  y:'12%',
        top: "170",
        // 主题目款式
        textStyle: {
          fontSize: "18",
          color: "#CCCCCC"
        },
        // 副标题款式
        subtextStyle: {
          fontSize: "35",
          fontWeight: "800",
          color: "#555"
        }
      },
      tooltip: {
        trigger: "item",
        // 此处是针对于批改后数据展现做批改,否则鼠标移上展现的数据是名称 +key 值
        formatter:(params)=>{
          let content = ``;
          let name = this.channelData.find((v) => v.name === params.name).text;
          content = `<div><span> ${name}</span>:<span>${params.value}</span></div>`;
          return content;
        }
      },
      legend: {
        top: "95%",
        left: "center",
        // left: '10%',
        icon: "circle",
        show:true,
        // 此处是针对于批改后数据展现做批改,否则鼠标移上展现的数据是名称 +key 值
        formatter:(name)=>{let showText = this.channelData.find((v)=>v.name===name).text;
          return showText;
        }
      },
      series: [
        {
          name: "",
          type: "pie",
          radius: ["40%", "70%"],
          avoidLabelOverlap: false,
          label: {
            show: false,
            position: "center"
          },
          emphasis: {
            label: {
              show: false,
              fontSize: "40",
              fontWeight: "bold"
            }
          },
          labelLine: {show: false},
          data: [
            {
                "key": "1",
                "name": "超高清 1",
                "text":"超高清",
                "value": 3
            },
            {
                "key": "2",
                "name": "低时延 2",
                "text": "低时延",
                "value": 1
            },
            {
                "key": "3",
                "name": "低时延 3",
                "text": "低时延",
                "value": 2
            },
        ]
        }
      ]
    });
  },

重点批改局部

正文完
 0