【Echarts系列】带图片的饼图

【Echarts系列】带图片的饼图

    • 前提说明
    • 示例
    • 数据格式
    • 代码
    • 动态旋转图片

为了节省后续开发学习成本,这个系列将记录我工作所用到的一些echarts图表。

前提说明

因为饼图中间需要添加图片,所以比较特殊,对于饼图中间数据的对齐很容易出现问题,大家参考时以具体要求进行修改。【本人对于对齐的处理过于简单粗暴,大家有更好的办法可以加以指正】

同时,因Echarts使用版本不同,有些参数可以省略,而有些效果可能也没法呈现,当前示例是基于4.8.0版本的,当前最新版本还可以实现中间图片360°循环旋转的效果。

示例

带图片的饼图如图所示:
在这里插入图片描述
关于代码中:tooltip的内容{b} : {c}公顷 占比{d}%
在这里插入图片描述

数据格式

data = [{value: 117.6,name: '居住'},{value: 1115.2,name: '工业'},{value: 1122.4,name: '商业'},{value: 1114.8,name: '其他'}]

代码

Vue版本以及脚本语言的选择各有不同,核心内容主要是option,重点关注该部分内容即可。

<template><div class="chart" ref="graphicPieRef"></div>
</template><script lang="ts">
import { Component, Prop, Ref, Vue, Watch } from 'vue-property-decorator'
import echarts from 'echarts'@Component({name: 'GraphicPie',components: {}
})
export default class GraphicPie extends Vue {@Prop() data!: any@Ref() graphicPieRef!: anyprivate chart: any = {}@Watch('data')onDataChange() {this.createChart()}lefts = ['18%', '15.5%', '13.5%', '11.5%', '9.5%', '7.5%', '5.5%', '3.5%', '1.5%']createChart() {this.chart = echarts.init(this.graphicPieRef)//添加在饼图中的图片const img = require('@/assets/img/cockpit/center-pie.png')const data = this.data//计算数据的总值let total = this.data.reduce((acc: number, cur: any) => {return acc + cur.value}, 0)total = total.toFixed(1)//此处是为了获取总数相应位数应该对齐的位置let left = this.lefts[total.toString().length - 1]const option = {tooltip: {trigger: 'item',formatter: '{b} : {c}公顷 占比{d}%',confine: true},legend: {icon: 'circle',orient: 'vertical',right: 0,top: 'center',itemGap: 10,itemWidth: 8,itemHeight: 8,formatter: function(name: string) {let target: number = 0let percent: any// 计算对应图例数据的所占百分比for (let i = 0; i < data.length; i++) {if (data[i].name === name) {target = Number(data[i].value)if (target === 0) {percent = 0} else {percent = (target / total * 100).toFixed(2)}}}let formattedName = ''//当图例文字过于长时,可以选择添加换行符for (let i = 0; i < name.length; i += 6) {formattedName += name.substring(i, i + 6) + '\n'}if (formattedName.endsWith('\n')) {formattedName = formattedName.slice(0, -1)}var arr = ['{name|' + formattedName + '}','{value|' + target + '}','{unit|公顷}','{value1|' + percent + '}','{unit|%}']return arr.join(' ')},textStyle: {      //使用rich格式化图例数据的展示rich: {name: {width: 70,color: '#757790'},value: {width: 35,color: '#194178',align: 'center'},value1: {width: 27,color: '#194178',align: 'center'},unit: {color: '#757790'}}}},graphic: [{type: 'image',   //添加图片style: {         //设置图片样式image: img,width: 95,height: 95},left: '5%',      //设置图片位置top: 'center'},{type: 'text',    //设置圆环中的总数位置上的样式left: left,top: '40%',style: {text: total,textAlign: 'center',fill: '#194178',fontSize: 24,fontWeight: 400}},{type: 'text',   //设置圆环中的单位位置上的样式left: '12%',top: '55%',style: {text: '总量(公顷)',textAlign: 'center',fill: '#757790',fontSize: 12,fontWeight: 400}}],color: ['#ED5A75','#59C975','#5C87DA','#00A2FF','#B6D7E9','#F9D03F','#E3A256'],series: [{type: 'pie',radius: ['48%', '62%'],  //设置两个圆环的大小center: ['20%', '50%'],  //设置饼图在网格容器中的位置data: data,// 间隔itemStyle: {normal: {borderWidth: 4,borderColor: '#fff'}},label: {  //是否显示饼图数据show: false},labelLine: {  //是否显示引导线show: false}}]}this.chart.setOption(option)}mounted() {this.createChart()window.addEventListener('resize', this.chartResize)}beforeDestroy() {if (this.chart) {window.removeEventListener('resize', this.chartResize)this.chart.dispose()}}chartResize() {if (this.chart) {this.chart.resize()}}
}
</script>
<style lang="scss" scoped>
.chart {width: 100%;height: 400px;
}
</style>

动态旋转图片

如果需要实现图片的动态旋转效果的话,可以在graphic中type属性为image的项中添加如下内容:

keyframeAnimation: [{duration: 200000,       //设置间隔时间loop: true,             //是否开启循环keyframes: [            //动画效果{percent: 0,rotation: 0},{percent: 1,rotation: -360}]}]

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

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

相关文章

正大国际期货:原油投资出现亏损的五种心理弱点

在原油投资当中&#xff0c;有五种心理弱点最容易导致投资者失败&#xff0c;必须注意加以克服! 盲目胆大心理。 有些投资者从未认真系统地学习过投资理论技巧&#xff0c;也没有经过任何模拟训练&#xff0c;甚至连最起码的投资基础知识都不明白&#xff0c;就贸然的进入原油…

企业管理/市场经营/自我管理,500+个经典职场工具 . rar

​500N个实用管理工具包&#xff0c;精选人力资源从业者必备之132项工具、40个管理者实效管理工具、成功自我管理的29个工具、常见的9种营销分析工具等&#xff0c;成功自我管理必备工具。 与班主任联系&#xff0c;即可获得完整资料包&#xff01; 1.PEST分析 2.五力分析 3.…

哈尔滨等保如何做?

哈尔滨等保测评是确保信息系统安全稳定运行的重要一环&#xff0c;它涉及到对业务、资产、安全技术和安全管理的全面调研和评估。本文将详细阐述哈尔滨等保测评的实施步骤和注意事项&#xff0c;帮助读者更好地理解和执行等保测评工作。 首先&#xff0c;我们需要明确等保测评的…

Hexo+Github搭建个人博客教程

hexo官网&#xff1a;https://hexo.io/zh-cn/ butterfly 主题设置&#xff1a;https://butterfly.js.org/ GitHub地址&#xff1a;https://github.com/jerryc127/hexo-theme-butterfly 基础命令 初始化博客命令&#xff1a;hexo init “文件名” 开启本地服务&#xff08;本…

Docker:Docker容器使用

文章目录 容器与宿主机复制容器环境变量设置镜像的导出和导入 由于篇幅原因&#xff0c;把后续的使用搬到这篇来 容器与宿主机复制 启动一个nginx服务 rootVM-24-7-ubuntu:~# docker run --name nginx -p 80:80 -d nginx 7a1578bedd97ffc48e9516d03a148c69e216a30f2d18f2624…

【MySQL】复合查询+表的内外连接

复合查询表的内外连接 1.基本查询回顾2.多表查询3.自连接4.子查询4.1单列子查询4.2多列子查询 5.在from子句中使用子查询6.合并查询7.表的内连和外连7.1内连接7.2外连接7.2.1左外连接 7.2.2右外连接 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1…

Java程序设计————从控制台输入

向控制台输入信息可以借助Scanner扫描器类来实现 语法&#xff1a; Scanner input new Scanner(System.in); 提示 &#xff08;1&#xff09;在使用Scanner类型之前&#xff0c;需要首先指明Scanner类所在的位置&#xff0c;既通过代码 import java.util.Scanner; &…

超强的文本转语音模型ChatTTS,一键打包,免费使用

超强的文本转语音模型ChatTTS&#xff0c;一键打包&#xff0c;免费使用 项目简介项目亮点安装使用python 代码直接引入一键启动包安装部署 ChatTTS webUI 小结一下 文本转语音&#xff08;TTS&#xff09;在生活中的应用非常的广泛&#xff0c;比如有声小说、语音导航&#xf…

电脑安全模式怎么进?详细步骤一学就会!

电脑安全模式是一种特殊的启动模式&#xff0c;加载最少的驱动程序和服务&#xff0c;帮助用户解决系统问题&#xff0c;如驱动程序冲突、病毒感染或系统文件损坏。进入安全模式可以帮助您诊断和修复问题&#xff0c;恢复系统的正常运行。本文将介绍电脑安全模式怎么进的三种方…

长期套餐是不是永久套餐?注意:并不是!

当我们在网上选择流量卡时&#xff0c;除了有短期套餐外&#xff0c;还有不少标注着长期套餐的流量卡&#xff0c;那么&#xff0c;长期套餐是不是永久套餐呢&#xff1f;能一直使用吗&#xff1f; ​ 在这里小编要说一下&#xff0c;长期套餐≠永久套餐 长期套餐就是字面意思…

上海斯歌荣获“2023年度杰出数字化转型方案提供商”奖项

为表彰上海斯歌在各行业的数字化转型事业中所做出的突出贡献&#xff0c;经CIO时代、新基建创新研究院专家组评审认定&#xff0c;授予上海斯歌“2023年度杰出数字化转型方案提供商”奖项。荣获该殊荣&#xff0c;不仅是业界对上海斯歌解决方案专业能力及落地实施能力的又一次认…

字符编码字符集那些事

此篇文章仅为网上资料的汇总&#xff0c;方便自己查询使用&#xff0c;原文如下&#xff1a; 参考文章1:一文读懂字符编码 参考文章2:菜鸟教程字符集 参考文章3:百度字符集 参考文章4:一个线上BUG彻底搞懂MySQL字符集&#xff0c;工作也快搞丢了 参考文章5:深入理解MySQL字符集…

Kaggle -- Titanic - Machine Learning from Disaster

新手kaggle之旅&#xff1a;1 . 泰坦尼克号 使用一个简单的决策树进行模型构建&#xff0c;达到75.8%的准确率&#xff08;有点低&#xff0c;但是刚开始&#xff09; 完整代码如下&#xff1a; import pandas as pd import numpy as npdf pd.read_csv("train.csv&quo…

我用香橙派做了一个Klipper 3D打印控制器

一个好用的Klipper 3D打印机&#xff0c;一定离不开一个可以稳定进行无线通信&#xff0c;而且性能足够&#xff0c;最重要是价格亲民的上位机。 所谓Klipper&#xff0c;简单来说就是一套可以通过联动上、下位机来有效提升3D打印精度的固件。它拥有高精度的步进电机控制&#…

【图书推荐】《Spark 3.0大数据分析与挖掘:基于机器学习》

本书重点 学习Spark 3.0 ML模块的机器学习算法&#xff0c;用于大数据分析与挖掘。 内容简介 Spark作为新兴的、应用范围广泛的大数据处理开源框架&#xff0c;吸引了大量的大数据分析与挖掘从业人员进行相关内容的学习与开发&#xff0c;其中ML是Spark 3.0机器学习框架使用…

STM32智能家居项目esp8266上云OneNet【附源码+详细教程】

目录 一、硬件选材 二、OneNet使用教程 三、代码修改教程 四、添加数据流方法 五、项目工程&#xff08;源码元件清单教程&#xff09; 小白也能做&#xff0c;项目工程在后文可下载。 一、硬件选材 二、OneNet使用教程 拿到代码后肯定是连不上网的&#xff0c;因为源码…

java复习知识点

1.get&#xff0c;set: java 中当定义了一个私有的成员变量的时候&#xff0c;如果需要访问或者获取这个变量的时候&#xff0c;就可以编写set或者get方法去调用&#xff0c;set是给属性赋值的&#xff0c;get是取得属性值的&#xff0c;被设置和存取的属性一般是私有&#xf…

LabVIEW输送机动态特性参数监测系统

开发了一套基于LabVIEW软件和STM32F103ZET6单片机的带式输送机动态特性参数监测系统。该系统通过电阻应变式压力传感器和光电编码器实时采集输送带的张力和带速信息&#xff0c;通过5G模块将数据传输至上位机&#xff0c;实现数据的可视化处理与实时预警&#xff0c;有效提高输…

强大的.NET的word模版引擎NVeloDocx

在Javer的世界里&#xff0c;存在了一些看起来还不错的模版引擎&#xff0c;比如poi-tl看起来就很不错&#xff0c;但是那是人家Javer们专属的&#xff0c;与我们.Neter关系不大。.NET的世界里Word模版引擎完全是一个空白。 很多人不得不采用使用Word XML结合其他的模版引擎来…

计算机网络7——网络安全4 防火墙和入侵检测

文章目录 一、系统安全:防火墙与入侵检测1、防火墙1&#xff09;分组过滤路由器2&#xff09;应用网关也称为代理服务器(proxy server)&#xff0c; 二、一些未来的发展方向 一、系统安全:防火墙与入侵检测 恶意用户或软件通过网络对计算机系统的入侵或攻击已成为当今计算机安…