uniapp项目 封装一个饼图组件 并且修改显示项的排列方式

news2025/1/10 3:02:58

 需求如下:

真实数据渲染后的完成效果如下:

 记录一下代码:

<template>
	<view>
		<view style="height:  600rpx;">
			<l-echart ref="chart" @finished="init"></l-echart>
		</view>
	</view>
</template>

<script>
	import * as echarts from '@/uni_modules/lime-echart/static/echarts.min';
	export default {
		props: {
			piechartData: {
				type: Array,
				default: () => [],
			},
		},
		data() {
			return {
				option: {

					legend: [{
							orient: 'vertical',
							height: 100,
							bottom: 1,
							left: '0%',
							data: [],
						},
						{
							orient: 'vertical',
							height: 100,
							bottom: 1,
							right: '0%',
							data: [],
							// textStyle: {
							//     rich: {
							//       name: {
							//         width: 100,
							//         height: 20,
							//         align: 'center',
							//         display: 'flex',
							//         justifyContent: 'space-between'
							//       }
							//     }
							//   }
						}
					],
					tooltip: {
						trigger: 'item',
						formatter: '{b} : {d}%'
					},
					series: [{
						name: '',
						type: 'pie',
						radius: '50%',
						center: ['center', '40%'],
						data: [],
						emphasis: {
							itemStyle: {
								width: 30,
								shadowBlur: 10,
								shadowOffsetX: 0,
								shadowColor: 'rgba(0, 0, 0, 0.5)'
							}
						},
						labelLine: {
							show: false // 隐藏饼图伸出来的线条
						},
						label: {
							normal: {
								// formatter: '{d}%',
								// position: 'inside'
                                 formatter: function(params) {
                                      // params.value:数据值
                                      // params.percent:百分比
                                      return  Math.round(params.value * 100)+'%';
                                    },
                                    position: 'inside'
							},
							show: false // 隐藏饼图上的文字
						},

					}]
				}

			}
		},
		mounted() {},
		watch: {
			piechartData: {
				handler(newValue, oldValue) {
					this.init()
				},
				deep: true,
			},
		},
		methods: {
			async init() {
				// console.log(this.chartData,'111');
				const chart = await this.$refs.chart.init(echarts);
				// chart.setOption(this.option)
				this.option.series[0].data = this.piechartData.map((v) => {
					return {
						value: v.percentage,
						name: v.medalName
					}
				})

				// legend
				let list = this.piechartData.map((v) => v.medalName);
				this.option.legend[0].data = list.slice(0, 4);
				this.option.legend[0].formatter = legendFormatter.bind(this.option);
				this.option.legend[1].data = list.slice(4);
				this.option.legend[1].formatter = legendFormatter.bind(this.option);

				chart.setOption(this.option);
				
				   

				// this -> option
				function legendFormatter(name) {
					const data = this.series[0]['data'];
					let currentDataVal = data.filter(e => e.name === name)[0].value;

					// currentDataVal = !currentDataVal ? `0%` : `${(currentDataVal * 100).toFixed(2)}%`;
					currentDataVal = !currentDataVal ? `0%` : `${Math.round(currentDataVal * 100)}%`;
                    const str = "  ";
					return `${name}${str}${currentDataVal}`;
				}
			},
		}
	}
</script>

<style lang="scss">
	.echarts-legend-container {
		display: flex;
		flex-wrap: wrap;
		justify-content: space-between;
	}

	.echarts-legend-item {
		display: inline-block;
	}

	.legend-item {
		flex-basis: 49%;
	}
</style>

在ECharts中,series 里面的label  formatter属性用于格式化标签的显示内容。它可以接受一个回调函数作为参数,以便自定义标签的显示方式。

回调函数的参数是一个对象,包含了标签的相关信息,如数据值、百分比(在饼图上显示的数据值或百分比)等。你可以根据需要使用其中的属性来自定义标签的显示内容。

下面是一个示例,展示如何使用回调函数来自定义标签的显示内容:

label: {
  normal: {
    formatter: function(params) {
      // params.value:数据值
      // params.percent:百分比
      return params.value + ' (' + params.percent + '%)';
    },
    position: 'inside'
  },
  show: true // 显示饼图上的文字
}

在这个示例中,我们将数据值和百分比拼接在一起作为标签的显示内容。你可以根据自己的需求来编写回调函数并返回相应的字符串。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701671.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试】一文知晓---拦截器和过滤器的区别

目录 背景关系图 拦截器和过滤器的区别实操1.过滤器1.1HttpServletRequestWrapper1.2 OncePerRequestFilter1.3 配置 2.拦截器2.1登录拦截2.2配置 3.监听器 三、注意1.静态资源问题2.登录拦截ajax重定向 总结 背景 关系图 然后具体执行流程如下&#xff1a; 拦截器和过滤器的区…

IDEA创建一个Servlet项目(tomcat10)

一、创建maven项目 org.apache.maven.archetypes:maven-archetype-webapp 二、增加Servlet依赖 tomcat9及以前依赖 <!--加入servlet依赖&#xff08;servlet的jar&#xff09;--><dependency><groupId>javax.servlet</groupId><artifactId>ja…

MoblieNet

论文信息 论文名称&#xff1a;MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文地址&#xff1a;https://arxiv.org/abs/1704.04861 研究背景和研究意义 之前的网络都倾向于将网络做得又大又深&#xff0c;并且不考虑网络的速度&…

测试CefSharp.WinForms的基本用法

微信公众号“dotNET全栈开发”的文章《C#使用CefSharp内嵌网页-并给出C#与JS的交互示例》介绍了CefSharp的基本用法。CefSharp支持在.net程序中内置Chromium&#xff0c;它是Chromium Embedded Framework (CEF) 的轻量化封装。   CefSharp面向Winform、wpf等提供对应的NuGet包…

SpringBoot初始化接口CommandLineRunner

CommandLineRunner的使用 接口定义使用执行顺序使用 Order 注解实现Orderd接口排序总结 接口定义 Spring官方给出的接口定义 package org.springframework.boot;FunctionalInterface public interface CommandLineRunner {void run(String... args) throws Exception; }在 Sp…

卡方检验之多重比较

一、案例介绍 某医师研究物理疗法、药物治疗和外用膏药3种疗法治疗周围性面神经麻痹的疗效&#xff0c;通过整体卡方检验已经得知3种疗法有效率的差异有统计学意义&#xff08;χ221.0377&#xff0c;p0.000&#xff09;的结论。现在想进一步知道&#xff0c;具体是哪两种疗法…

Android后台应用开启前台服务---android8到android12梳理

1、Android 8.0 异常报错 在Android 8.0 系统中&#xff0c;处于后台的应用想要开启前台服务&#xff0c;必须满足两点&#xff1a; 在Activity中调用startForegroundService()方法所调起的Service必须执行startForeground(int id, Notification notification)方法&#xff0…

计算几何——gitf-wrapping算法

几何中的"gift-wrapping"算法&#xff0c;又称为"Jarvis算法"&#xff0c;是一种用于计算凸包(convex hull)的方法。下面我将为你解释一下该算法的步骤&#xff1a; 1. 找到具有最小x坐标的点P&#xff0c;我们将其作为凸包的起点。 2. 将P标记为当前点&a…

doker安装RabbitMQ以及用java连接

目录 doker安装&#xff1a; RabitMq安装&#xff1a; java链接 doker安装&#xff1a; 参考链接&#xff08;非常详细&#xff09;&#xff1a; docker安装以及部署_docker bu shuminio_春风与麋鹿的博客-CSDN博客 安装好后开启doker //启动docker服务 systemctl start do…

PromQL讲解与实战操作

PromQL讲解与实战操作 一、PromQL 介绍 PromQL&#xff08;Prometheus Query Language&#xff09;是 Prometheus 内置的数据查询语言&#xff0c;它能实现对事件序列数据的查 询、聚合、逻辑运算等。它并且被广泛应用在 Prometheus 的日常应用当中&#xff0c;包括对数据查询…

在Linux服务器上简单部署一个Python项目

一、在对应的服务器上检查有无Python环境 大部分Linux系统都是自带了Python环境的&#xff0c;查看是否具备Python的运行环境&#xff0c;可以通过命令Python --version 或者 Python3 --version 查看。如果你的项目需要Python3的环境&#xff0c;而系统又没有&#xff0c;则需要…

Linux 开启 swap 分区详细教程

故事背景&#xff1a; 哥们云机器内存资源不足&#xff0c;搞个 kafka eagle 监控&#xff0c;刚跑起来就卡死了&#xff0c;就很无语&#xff0c;哥们忙活&#xff0c;算了直接开搞&#xff0c;内存不够&#xff0c;硬盘来凑&#xff0c;拿着硬盘去做swap分区&#xff0c;也能…

JavaEE-SpringMVC-云借阅图书管理系统(包含源码、数据库sql文件、报告)

文章目录 前言云借阅系统功能结构图云借阅系统结构层次云借阅系统项目文件组织结构开发环境具体操作1. Maven仓库修改2. MySQL数据库配置文件3. Tomcat运行截图 总结 前言 参考借鉴黑马程序员书籍&#xff1b;和老师上课讲解的代码和PPT。核心代码由自己编写完成&#xff0c;核…

【夜深人静学数据结构与算法】回溯算法

目录 前言&#xff1a; 回溯算法&#xff1a; 回溯法的常见应用: 回溯法的模板: 回溯法的图解&#xff1a;​ 案例&#xff1a; 77. 组合 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a; 前言&#xff1a; 回溯算法是一个比较抽象的算法&#xff0c;因此我们…

JavaScript中的面向对象

面向对象编程是一种编程范式。 面向对象。何为对象&#xff1f; 复习一下&#xff1a; JavaScript中的数据类型分为&#xff1a; 原始类型&#xff1a;数值型&#xff0c;字符串型&#xff0c;布尔型、ES6新增的symbol 特殊类型&#xff1a;undefined型&#xff0c;null型 组合…

chatgpt赋能python:隐藏输入:保护密码和敏感数据的有效方法

隐藏输入&#xff1a;保护密码和敏感数据的有效方法 在今天的数字时代&#xff0c;网络安全成为了无所不在的话题。密码和敏感数据的泄漏是任何人都不想看到的结果。因此&#xff0c;在这种情况下&#xff0c;隐藏输入成为了保护我们的密码和敏感数据的有效方法。 Python是数…

el-date-picker设置右侧显示图标

<template><div><el-form ref"form" label-width"100px"><el-form-item label"日期&#xff1a;" class"date_box"><el-date-picker v-model"time" type"date" :clearable"true&…

【GaussDB分布式特性】

GaussDB分布式特性 实验环境一、分布式架构二、分片和分区 实验环境 华为云GaussDB云数据库&#xff0c;规则如下&#xff1a; 集群拓扑结构&#xff0c;如下&#xff1a; 一、分布式架构 逻辑架构 常用部署方式 部署说明&#xff1a; 1.双AZ采用带第三方仲裁方式部署&am…

利用低代码平台实现协同办公,助力企业提升效益

概要&#xff1a;本文介绍了协同办公的作用&#xff0c;以及利用低代码平台实现协同办公的优势。同时也分享了天翎为华晨汽车打造的低代码协同工具&#xff0c;帮助企业提高管理效率&#xff0c;改善运营模式&#xff0c;提升产品质量及生产精益化。展示了咨询库、原料质量录入…

无锁队列ringbuff实现以及性能

文章目录 一、使用场景二、对比有锁优势三、无锁队列实现方式四、循环队列实现1&#xff09;数据结构设计3&#xff09;代码实现4&#xff09;性能测试5&#xff09;总结 一、使用场景 无锁队列主要适用于高并发场景或者对性能要求较高的场景&#xff0c;主要使用场景有如下几…