echarts pie饼图样式

2023-12-18 15:15
文章标签 样式 echarts pie

本文主要是介绍echarts pie饼图样式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

左边饼图是echarts完成,右边的图例是div写的,因为图例的样式没法用legend的样式完成到这样
主页面Html:
<div class="chartHeight" style="position: relative;"><pieChartContract :opt="contractStatics" /><div class="contractLegend"><div v-for="item,index in contractStatics.seriesData" :key="index" class="contractLegendItem" :style="'border-left: 1px dotted '+ color[index]"><div class="dashed" :style="'background:' + color[index]"></div><div>{{ item.name }}</div><div class="contractLegendData" :style="'color:'+ color[index]">{{ item.value }}亿元 30%</div></div></div>
</div>
.chartHeight{width: 100%;height: 220px;
}
.contractLegend{position: absolute;left: 60%;top: 50%;transform: translateY(-50%);
}
.contractLegendItem{font-size: 14px;margin-bottom: 20px;color: #595D64;text-indent: 10px;position: relative;justify-content: flex-start;}
.contractLegendItem:last-child{margin-bottom: 0;
}
.contractLegendItem .dashed{content: "";position: absolute;top: 0;left: -2px;width: 3px;height: 10px;opacity: 1;border-radius: 5px;
}
.contractLegendData{font-size: 16px;text-align: left;margin-top: 6px;
}
主页面js:
data() {
return {contractStatics: {seriesData: [{name: '技术服务类',value: 30.5,itemStyle: {color: '#3562D4',},},{name: '监理监测类',value: 41.4,itemStyle: {color: '#2BC4CD',},},{name: '工程总承包类',value: 21.1,itemStyle: {color: '#E68B29',},}],},
}
}
// 组件pieChartContract 引入:
import pieChartContract from "./components/pieChartContract";
pieChartContract.vue组件全部:
<template><div style="width: 100%;height: 100%;"><ChartPanel ref="chart" :option="options" :style="opt.yAxisName ? 'height:calc(100% - 16px)' : ''"></ChartPanel></div>
</template><script>
import * as echarts from 'echarts'
import ChartPanel from '@/components/ChartPanel';
export default {components: {ChartPanel},props: {opt: {type: Object,default() {return {}}}},data() {return {options: null}},watch: {opt: {deep: true,immediate: true,handler(val) {// if (val && val.seriesData) {this.getOpt(val)// }}}},methods: {getOpt(val) {let {seriesData,} = vallet seriesData1 = []let seriesData2 = []let seriesData3 = []let color = ['#3666E0', '#26D7E0', '#F0922E']seriesData.forEach((item, index) => {seriesData1.push({...item,itemStyle: {color: color[index],opacity: 1}})seriesData2.push({...item,itemStyle: {color: color[index],opacity: 0.4}})seriesData3.push({...item,itemStyle: {color: color[index],opacity: 0.1}})})this.options = {legend: {orient: 'vertical',show: false,left: '60%',y: 'center',itemWidth: 1,itemHeight: 32,itemGap: 20,textStyle: {color: '#595D64',fontSize: 14,lineHeight: 20,rich: {percent0: {color: color[0],fontSize: 16,},percent1: {color: color[1],fontSize: 16,},percent2: {color: color[2],fontSize: 16,}},},formatter: name => {let dataIndex = 0let obj = (seriesData.filter((item, index) => {if (item.name == name) {dataIndex = indexreturn item}}))[0]return obj.name + '\r\n{percent' + dataIndex + '|' + obj.value + '亿元} ' +' {percent' + dataIndex + '|30%}'},},tooltip: {show: true,borderWidth: 0,formatter: params => {let result = `<div style="font-weight:700">${params.name}</div><div><span style="color:${params.color};font-weight:700">${params.value}亿元 ${params.percent}%</span>  </div>`return result}},series: [{type: 'pie',radius: ['45%', '70%'],center: ['25%', '50%'],hoverAnimation: false,z: 10,label: {show: false,},data: seriesData1,labelLine: {show: false,},},{type: 'pie',radius: ['35%', '45%'],center: ['25%', '50%'],hoverAnimation: false,label: {show: false,},data: seriesData2,labelLine: {show: false,},},{type: 'pie',radius: ['29%', '35%'],center: ['25%', '50%'],hoverAnimation: false,label: {show: false,},data: seriesData3,labelLine: {show: false,},},],};this.$nextTick(() => {this.$refs.chart.initChart(echarts, chart => {// chart.setOption(this.options)this.options && chart.setOption(this.options, true);});})}}
}
</script>
ChartPanel.vue 对echarts组件的二次封装
<template><div ref="chartPanel" class="chart-panel" :class="className" :style="{ height: height, width: width }" />
</template><script>
// echarts v4 import
// import echarts from 'echarts'
// echarts v5 import
import * as echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
import { debounce } from '@/utils'export default {name: 'ChartPanel',props: {className: {type: String,default: 'chart'},width: {type: String,default: '100%'},height: {type: String,default: '100%'},mini: {type: Boolean,default: false},autoResize: {type: Boolean,default: true},option: {type: Object,required: true},initName: {type: String,default() { return '' }},initMap: {type: Object,default: null}},data() {return {chart: null,timer: null}},watch: {option: {deep: true,handler(val) {if (this.initName && this.initMap) {// echarts更新到5.x之后就不能重新设置option了 必须重新init图形this.initChart()} else {if (this.chart) {this.chart.clear()const that = thisthat.timer = setTimeout(() => {that.chart.setOption(val, true)}, 500)}}}},initName: {deep: true,handler(val) {this.initChart()this.resize()}}},mounted() {this.$nextTick(() => {this.initChart()})if (this.autoResize) {this.__resizeHandler = debounce(() => {if (this.chart) {this.chart.resize()}}, 100)window.addEventListener('resize', this.__resizeHandler)}// 监听侧边栏的变化this.sidebarElm = document.getElementsByClassName('sidebar-container')[0]this.sidebarElm && this.sidebarElm.addEventListener('transitionend', this.sidebarResizeHandler)},beforeDestroy() {if (!this.chart) {return}if (this.autoResize) {window.removeEventListener('resize', this.__resizeHandler)}this.sidebarElm && this.sidebarElm.removeEventListener('transitionend', this.sidebarResizeHandler)this.chart.dispose()this.chart = nullclearTimeout(this.timer)},methods: {sidebarResizeHandler(e) {if (e.propertyName === 'width') {this.__resizeHandler()}},initChart() {this.chart = echarts.init(this.$el)// this.chart = echarts.init(this.$el, 'macarons')if (this.initName && this.initMap) {echarts.registerMap(this.initName, this.initMap)}if (this.option != null) {this.chart.clear()const that = thisthis.timer = setTimeout(() => {that.chart.setOption(that.option, true)}, 500)}this.$emit('initChart', this.chart)},resize() {if (this.chart != null) {this.chart.resize()}}}
}
</script>
debounce方法:
/*** @param {Function} func* @param {number} wait* @param {boolean} immediate* @return {*}*/
export function debounce(func, wait, immediate) {let timeout, args, context, timestamp, result;const later = function() {// 据上一次触发时间间隔const last = +new Date() - timestamp;// 上次被包装函数被调用时间间隔 last 小于设定时间间隔 waitif (last < wait && last > 0) {timeout = setTimeout(later, wait - last);} else {timeout = null;// 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用if (!immediate) {result = func.apply(context, args);if (!timeout) context = args = null;}}};return function(...args) {context = this;timestamp = +new Date();const callNow = immediate && !timeout;// 如果延时不存在,重新设定延时if (!timeout) timeout = setTimeout(later, wait);if (callNow) {result = func.apply(context, args);context = args = null;}return result;};
}

这篇关于echarts pie饼图样式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/508866

相关文章

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

在项目开发中,jsp页面不会少了,如何公用页面(添加页面和修改页面)和公用样式代码(css,js)?

在项目开发中,如何公用添加页面和修改页面? <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><html><head><title>岗位设置</title><%@ include file="/WEB-INF/jsp/public/common.jspf"%></head><body> <!-- 标

纯css实现checkbox的checked样式

纯css也能实现checked样式 今天使用微信的WEUI的checkbox的时候,发现点击checkbox是有checked和unchecked的变化的,但是想要去获得checkbox的checked状态时,发现event listener里居然没有该checkbox的click之类的事件。这才发现,weui只是纯粹的css样式,没有对应组件的js代码。那么问题来了,没有js事件,weui是如

WebAPI (一)DOM树、DOM对象,操作元素样式(style className,classList)。表单元素属性。自定义属性。间歇函数定时器

文章目录 Web API基本认知一、 变量声明二、 DOM1. DOM 树2. DOM对象3. 获取DOM对象(1)、选择匹配的第一个元素(2)、选择匹配多个元素 三、 操作元素1. 操作元素内容2. 操作元素属性(1)、常用属性(href之类的)(2)、通过style属性操作CSS(3)、通过类名(className)操作CSS(4)、通过classList操作控制CSS(5)、操作表单

Echarts使用笔记--饼图,柱状图

开始做前端了,感觉自己是要变成全栈工程师了。。。 今天使用了echart,用之前觉得好高大上好厉害,肯定很复杂。用了以后才发现,使用起来超简单,当然,精通很难,里面的各种配置太多了,本文记录一下自己用到的东西。 echart使用 现在直接引用js文件就可以了 <script src="echarts.min.js"></script> echart组件需要在一个宽高固定的DOM里才能显示

【python web】Flask+Echarts 实现动图图表

flask 是python web开发的微框架,Echarts酷炫的功能主要是javascript起作用,将两者结合起来,发挥的作用更大。下面将Echarts嵌套进Flask的html模板中。 项目结构: 打开demo.py运行,点击console中的链接http://127.0.0.1:5000/ 就可以看到我们想要的动态图表。 demo.py #coding:utf-8fro

Android style(样式), theme(主题)资源

本文内容摘自《疯狂Android讲义 第三版-李刚著作》 样式和主题资源都用于对Android应用进行“美化”,只要充分利用Android应用的样式和主题资源,开发者就可以开发出各种风格的Android应用。 样式资源(style): 如果我们经常需要对某个类型的组件指定大致相似的格式,比如字体,颜色,背景色等,如果次都要为View组件重复指定这些属性,无疑会有大量的工作量,而且不利于项目后

鼠标移入移出,样式修改,显示隐藏提示消息

重要的有三点: 1.a标签中的ishow是自己定义的属性,自己输入值 2.a:hover表示鼠标移上去时, 3.a:hover:after{content:attr(ishow)}表示鼠标移上去后,显示提示消息 <!DOCTYPE html> <html> <head lang="en">     <meta charset="UTF-8">     <title>实践题 </

10Python的Pandas:样式Style

Pandas 提供了多种样式选项,可以让你对数据框的显示进行格式化。这些样式可以帮助突出显示数据中的某些元素、设置颜色、格式化数字等。以下是一些常用的 Pandas 样式示例: 1. 基本样式设置 要为整个数据框应用样式,可以使用 style 属性。例如,你可以为所有的数值设置显示格式: import pandas as pd# 创建示例数据框df = pd.DataFrame({'A':

使用 Java 为图片添加各种样式的水印

在互联网时代,图像的版权保护变得越来越重要。水印作为一种常见的图像保护手段,可以有效防止未经授权的复制和使用。在本文中,我们将详细探讨如何在 Java 中为图片添加各种样式的水印,包括文本水印、图像水印、平铺水印等。通过这一系列的示例和代码实现,您将掌握如何利用 Java 来创建和应用水印,为您的图片增添一层保护。 1. 简介 水印是一种覆盖在图像表面上的标识,通常以文字或图像的形式存在。其主