echarts 饼图效果,显示其对应数值及百分比

需求:echarts 饼图效果,显示其对应数值及百分比

代码

<Chart1 :ecStyle="ecStyle" :ecOption="optionRight2"/>

<script>
	import Chart1 from "@/components/Chart";
	data(){
		return(){
			optionRight2:{
			  //表头菜单显示
			  //legend: {
				//left:'10%',
				//top:'5%',
				//bottom:'3%',
				//textStyle: {
					//color: '#fff'
				//}
			  //},
	          tooltip: {
	            trigger: 'item'
	          },
	          
	          series: [
	            {
	              name: '数量',
	              type: 'pie',
	              radius: ['35%', '60%'],
	              //center: ['50%', '58%'], 图表定位
	              avoidLabelOverlap: false,  //设置为true时,当数值为0时不重叠
	              itemStyle: {
	                borderRadius: 10,
	                borderColor: '#07076a',
	                borderWidth: 1
	              },
	              labelLine: {
	                show: true,
	              },
	              data: [
	                { value: 57, name: '商户',itemStyle:{color:'#fc8452'}},
	                { value: 117, name: '自由职业',itemStyle:{color:'#3ba272'}},
	                { value: 369, name: '大学生',itemStyle:{color:'#73c0de'}},
	                { value: 448, name: '农民工',itemStyle:{color:'#ee6666'}},
	                { value: 28, name: '医生',itemStyle:{color:'#fac858'}},
	                { value: 135, name: '工程师',itemStyle:{color:'#91cc75'}},
	                { value: 335, name: '其它',itemStyle:{color:'#5470c6'}},
	              ],
	              label:{
	                formatter:function(data){
	                  return `${data.name} ${data.value} 
	(${data.percent.toFixed(1)}%)`
	                }
	              }
	            }
	          ]
	        }
		}
	}
}

</script>

chart1组件

//chart1组件

<template>
    <div :style="ecStyle" ref="chartRef"></div>
</template>

<script>
export default {
    name: 'Chart',
    props: {
        ecStyle: {
            type: Object,
            default: function () {
                return {
                    width: '100%',
                    height: '100%'
                }
            }
        },
        ecOption: {
            type: Object,
            default: function () {
                return {}
            }
        }
    },
    data() {
        return {
            chart: ''
        }
    },
    mounted() {
        this.setDrawChart()
    },
    methods: {
        setDrawChart() {
            this.chart = this.$echarts.init(this.$refs.chartRef)
            this.chart.clear()
            this.chart.setOption(this.ecOption)
            window.addEventListener('resize', this.chart.resize)
			
			//饼图点击的方法
			this.chart.on('click',function(param){
				//当前 name 代表饼图所定义的 name
				if(param.name == ''){}	
			})
			
        }
    },
    watch: {
        /**
         * 观察图表变化
         * @date 2020/8/26 13:54
         * @returns {Object}
         **/
        ecOption: {
            handler(newVal, oldVal) {
                if (this.chart) {
                    if (newVal) {
                        this.chart.setOption(newVal, true)
                    } else {
                        this.chart.setOption(oldVal)
                    }
                } else {
                    this.init()
                }
            },
            // 对象内部属性的监听
            deep: true
        }
    },
    destroyed() {
        /**
         * 销毁监听事件
         * @date 2020/8/26 13:55
         **/
        window.removeEventListener('resize', this.chart.resize)
    }
}
</script>

效果

在这里插入图片描述

### 如何在 ECharts 显示数值 为了使 ECharts能够展示具体的数值,在配置项 `option` 中,可以通过设置 `series.label` 来控制数据标签的行为。具体来说: - 设置 `show: true` 可以开启数据显示。 - 使用 `formatter` 函数来自定义标签样式和内容。 以下是详细的配置方法以及代码实例[^1]: #### 数据标签配置属性说明 - **label.show**: 是否显示标签,默认为 false;设为 true 则会显示对应百分比或实际值。 - **label.formatter**: 自定义标签内容格式化器函数,可以返回字符串作为最终渲染的文字。此参数接受模板字符串 `{a}`(系列名称)、`{b}`(数据项名称)、`{c}` (数值) 和 `{d}%`(百分比)。如果希望只显示数值,则可以直接使用 `{c}` 或者通过 JavaScript 表达式处理更复杂的逻辑[^2]。 ```javascript // 初始化表对象并指定容器ID let myChart = echarts.init(document.getElementById('main')); // 定义全局配置项 var option; // 构建配置项 option = { title : { text: '某站点用户访问来源', subtext: '纯属虚构' }, tooltip : { trigger: 'item' }, legend: { orient: 'vertical', left: 'left', data: ['直接访问','邮件营销','联盟广告','视频广告','搜索引擎'] }, series : [ { name:'访问来源', type:'pie', // 表类型为 radius : '55%', center: ['50%', '60%'], label:{ show:true, formatter:function(params){ return params.name + '\n' + '{c|'+params.value+'}' ; }, rich:{} }, data:[ {value:335, name:'直接访问'}, {value:310, name:'邮件营销'}, {value:234, name:'联盟广告'}, {value:135, name:'视频广告'}, {value:1548, name:'搜索引擎'} ] } ] }; // 加载配置项到表上 myChart.setOption(option); ``` 上述代码片段展示了如何利用 `label.formatter` 属性来定制每个扇区的数据标签,其中不仅包含了默认的名称信息还加入了具体数值,并且支持多行文本布局以便更好地适应不同尺寸下的视觉呈现效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值