echarts 饼状图 label 既在内部显示数值(百分比),又显示外部指示线

24,116次阅读
没有评论

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

需求

项目开发中,产品经理绘制的原型图中,需要前端实现一个饼状图,且既在饼图内部中 显示 百分比,又显示 外部指示线及数值,效果如下图所示:

echarts 饼状图 label 既在内部显示数值(百分比),又显示外部指示线

查了下 Echarts 官网文档,需要配置 series 下的 label 配置项,如下所示:

series: [
	label: {
		normal: {
			position: 'inside' 
			show: true,
			formatter: '{c}  
		}
	}
	
]

其中,formatter 是标签内容的格式器,用于转换格式。支持 字符串和回调函数两种形式。

{c} 代办字符串模板变量,表示数据值,常用的模板变量有:

  • {a}:系列名
  • {b}:数据名
  • {c}:数据值
  • {d}:百分比

不过问题来了,echarts 好像没法直接配置成 内部 + 外部 同时展示的情况。,因为在 单个的 series 中(即其中的一个对象中),只能设置一个 label。

echarts 饼状图 label 既在内部显示数值(百分比),又显示外部指示线

不过也好解决,通过查看 echarts 官网 series 配置项,可以看出,series 是一个数组(如上图所示),既然单个中只能出现一个,那么我配置成 2 个(多个)相同的对象,让他们重合,就会出现两个 label 标签,一个在内部展示,一个在外部展示,就可以完美解决这种情况。

代码实例如下所示:

series: [
                {
                    type: 'pie',
                    radius: '90%',
                    data: [
                        { value: data?.winBidNumber || 0, name: '中标数量' },
                        { value: data?.loseBidNumber || 0, name: '未中标数量' },
                        { value: data?.abandonBidNumber || 0, name: '弃标数量' }
                    ],
                    labelLine: {
                        show: true,
                        position: 'outside',
                        length: 10,
                        length2: 50
                    },
                    emphasis: {
                        itemStyle: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    },
                    label: {
                        normal: {
                            position: 'outside',
                            show: true,
                            formatter: (d: any) => {
                                console.log(222, d);
                                return d.name + '(' +  d.value  + '次' +')'
                            }
                        }
                    }
                },
                {
                    type: 'pie',
                    radius: '90%',
                    data: [
                        { value: data?.winBidNumber || 0, name: '中标数量' },
                        { value: data?.loseBidNumber || 0, name: '未中标数量' },
                        { value: data?.abandonBidNumber || 0, name: '弃标数量' }
                    ],
                    emphasis: {
                        itemStyle: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    },
                    label: {
                        normal: {
                            position: 'inside',
                            show: true,
                            formatter: (d: any) => {
                                return d.percent + '%'
                            }
                        }
                    }
                }
            ]

其中, labelLine 属性 是 用来配置 外部指示线(第一段、第二段)的长度及样式的。

formatter 为 回调函数的写法如上面的代码实例,该回调函数接收一个参数,该参数的值包含了 模板字符串变量所拥有的值,如下图打印的所示:

在这里插入图片描述

原文地址: echarts 饼状图 label 既在内部显示数值(百分比),又显示外部指示线

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-07发表,共计1411字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)