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

项目场景:

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值