当前位置: 首页 > article >正文

在Vue3中使用Echarts的示例

1.常用-引用ts文件方式

1.1 导出ts文件-一个简单的柱状图

export const baseBarChart = (xdata: string[], data: number[][], legendData: string[]) => {if (data.length === 0) {return noData;}// 定义颜色数组const color = ['#00CCCC','#FF9900','#1677DC','#FF6666','#B366FF','#6666FF','#3366CC','#0099CC','#00CC66','#98CB19','#FFCC00','#666699',];const maxDataValue = Math.max(...data.flat()); // 计算数据中的最大值const yAxisMax = Math.ceil(maxDataValue / 5) * 5; //  将最大值向上取整到最接近的5的倍数// 使用循环动态添加series,根据数组数目自动生成柱状图数量const seriseData = data.map((item, index) => {return {name: legendData[index],data: item,type: 'bar',// barWidth: 30,barMaxWidth: 30,xAxisIndex: 0,color: color[index], // 循环使用颜色数组label: {show: true, // 显示数值position: 'top', // 数值显示在柱子的顶部fontSize: 14, // 字体大小color: '#333333', // 字体颜色fontWeight: 'bold', // 字体加粗},};});// 完整的配置项let option: any = {tooltip: {trigger: 'axis',textStyle: {fontSize: 14,color: '#9A9A9A',},},grid: {containLabel: true,bottom: '15%',top: '10%',left: '2%',right: '2%',},xAxis: {type: 'category',data: xdata,axisLabel: {color: '#9a9a9a',fontSize: 12,interval: 'auto', // 自动隐藏部分标签(可根据需要调整为具体值)formatter: function (value: any) {// 截断过长的标签,并添加省略号return value.length > 2 ? value.slice(0, 2) + '...' : value;},},},yAxis: {type: 'value',min: 0,max: yAxisMax, // 动态设置最大值interval: yAxisMax / 5, // 根据最大值动态设置刻度间隔axisLabel: {color: '#9a9a9a',fontSize: 14,},},legend: {left: 'center',type: 'scroll',bottom: '2%',textStyle: {fontSize: 14,color: '#9A9A9A',},itemWidth: 16,itemHeight: 10,},series: seriseData,};return option;
};

1.2 vue文件-部分

   <div id="chartContainerBarTwo" ref="chartContainerBarTwo" class="chartContainerBarTwo"></div>
import { baseBarChart, baseLineChart, baseCircleChart } from '../../../echarts';
import { onMounted, ref, Ref, computed } from 'vue';
import { useECharts } from '@/hooks/web/useECharts';
import * as echarts from 'echarts';
onMounted(() => {init();
});
function init() {initDeviceCountChartTwo();}const chartContainerBarTwo = ref<HTMLDivElement | null>(null);
第一种
const initDeviceCountChartTwo = async () => {// 初始化图表并获取实例const { setOptions, getInstance } = useECharts(chartContainerBarTwo as Ref<HTMLDivElement>);try {let legend: any = ['智能仪表'];let xdata: any = ['天津分公司', '深圳分公司', '海南分公司', '湛江分公司', '上海分公司'];let data: any = [[46224, 13021, 3791, 9072, 4557]];setOptions(baseBarChart(xdata, data, legend));// 获取图表实例并保存(如果需要)const currentChartInstance = getInstance();console.log('当前图表实例已保存:', currentChartInstance);loading1.value = false;} catch (error) {setOptions(baseBarChart([], [], []));loading1.value = false;}
};
第二种
const initDeviceCountChartTwo = async () => {const chart = echarts.init(chartContainerBarTwo.value);try {let legend: any = ['智能仪表'];let xdata: any = ['天津分公司', '深圳分公司', '海南分公司', '湛江分公司', '上海分公司'];let data: any = [[46224, 13021, 3791, 9072, 4557]];chart.setOption(baseBarChart(xdata, data, legend));loading1.value = false;} catch (error) {setOptions(baseBarChart([], [], []));loading1.value = false;}
};

PS:与之对应的还有图表resize函数,详情见博客解决 ECharts 切换图表时的 Resize 问题-CSDN博客

2.封装-ref作为传参

这是一个环形图ts文件,效果如下,中间可放图片,内外圈颜色不一样,可设置题目

import * as echarts from 'echarts';
import { type ECharts, init } from 'echarts';
import type { Ref } from 'vue';
import imagePath from '../views/index/instrumentDevice/img/circle-center.png';
/*** 初始化 ECharts 图表的通用函数* @param chartRef - Vue 的 ref,指向 DOM 元素* @param data - 图表数据* @param colors - 渐变颜色外圈数组* @param colorse - 渐变颜色内圈数组* @param title - 图表标题(可选)* @returns ECharts 实例*/
function initEcharts(chartRef: Ref<HTMLDivElement | null>,data: any[],colors: string[][],colorse: string[][],title?: string,
): ECharts | null {// 检查 ref 是否有效if (!chartRef.value) {console.error('ECharts ref is not valid');return null;}// 创建 ECharts 实例const myChart = init(chartRef.value);// 计算总计const total = data.reduce((acc, item) => acc + Number(item.value), 0);// 图表配置const chartData = {title: {text: title,left: 'left',top: '5%',textStyle: {fontSize: 18,fontWeight: 'bold',color: '#ffffff',},},legend: {top: '90%',left: 'center',itemWidth: 16,itemHeight: 10,textStyle: {color: '#ffffff',},},tooltip: {show: false,formatter: (params: any) => {const percent = ((params.value / total) * 100).toFixed(1);return `总计: ${params.value} (${percent}%)`;},trigger: 'item',confine: true,backgroundColor: '#1E2857',borderColor: '#1E2857',color: '#fff',textStyle: {color: '#fff',},axisPointer: {type: 'cross',label: {backgroundColor: '#6a7985',},},},grid: {top: '0%',left: '0%',right: '0%',bottom: '0%',},graphic: [{type: 'image',style: {image: imagePath,width: 150,height: 150,},left: 'center',top: 'center',},{type: 'text', // 添加文本元素style: {text: `总计: ${total}`, // 显示总计信息fontSize: 16,fontWeight: 'bold',fill: '#ffffff', // 文本颜色},left: 'center', // 水平居中top: '85%', // 距离底部 5%},],series: [// 外圈{type: 'pie',radius: ['50%', '60%'],avoidLabelOverlap: true,z: 11,label: {show: true, // 外圈显示标签position: 'outside',formatter: (params: any) => {const percent = ((params.value / total) * 100).toFixed(1);return `${params.name} ${percent}%`;},fontSize: 14,color: '#ffffff',},labelLine: {show: true,length: 10,length2: 20,position: 'outside',lineStyle: {color: '#ffffff',},},data: data.map((item, index) => ({...item,itemStyle: {color: new echarts.graphic.RadialGradient(0, 0, 1, [{ offset: 0, color: colors[index][0] },{ offset: 1, color: colors[index][1] },]),},label: {show: item.value > 0, // 当值大于 0 时显示标签},labelLine: {show: item.value > 0, // 当值大于 0 时显示引导线},})),},// 内圈阴影{type: 'pie',radius: ['40%', '60%'],avoidLabelOverlap: true,z: 10,itemStyle: {borderRadius: 2,borderWidth: 1,shadowBlur: 20,shadowColor: '#1569ff',shadowOffsetX: 0,shadowOffsetY: 0,},label: {show: false, // 内圈不显示标签},labelLine: {show: false, // 内圈不显示引导线},data: data.map((item, index) => ({...item,itemStyle: {color: new echarts.graphic.RadialGradient(0, 0, 1, [{ offset: 0, color: `${colors[index][0]}4D` }, //渐变色透明度{ offset: 1, color: `${colors[index][0]}4D` },]),},})),},],animation: false,};// 设置图表配置myChart.setOption(chartData, true);return myChart;
}
export default initEcharts;

vue文件-部分

<div v-if="currentChart === 'SIS'" ref="echartsRefSIS" class="content_echarts"></div>const echartsRefSIS = ref<HTMLDivElement | null>(null);
 let ref: Ref<HTMLDivElement | null> | null = null;ref = echartsRefSIS;// 初始化 ECharts 实例const myChart = initEcharts(ref, annularList, gradientColors, gradientColorse, title);currentChartInstance = myChart; // 保存当前图表实例

相关文章:

在Vue3中使用Echarts的示例

1.常用-引用ts文件方式 1.1 导出ts文件-一个简单的柱状图 export const baseBarChart (xdata: string[], data: number[][], legendData: string[]) > {if (data.length 0) {return noData;}// 定义颜色数组const color [#00CCCC,#FF9900,#1677DC,#FF6666,#B366FF,#666…...

Three.js 阴影 (Shadow) 知识点整理

阴影主要由 castShadow 和 receiveShadow 控制&#xff0c;并通过不同类型的光源 (DirectionalLight、SpotLight、PointLight) 生成。我们将系统地整理与阴影相关的知识点。 1️⃣ 基础概念 castShadow &#x1f3ad;&#xff1a;物体是否投射阴影。receiveShadow &#x1f3d…...

GHCTF web方向题解

upload?SSTI! import os import refrom flask import Flask, request, jsonify,render_template_string,send_from_directory, abort,redirect from werkzeug.utils import secure_filename import os from werkzeug.utils import secure_filenameapp Flask(__name__)# 配置…...

Logic-RL:小参数qwen模型复现DeepSeek R1 zero

最近很多参照DeepSeek模型训练推理模型的工作,本文将深入 “Logic-RL: Unleashing LLM Reasoning with Rule-Based Reinforcement Learning” 的论文,该论文提出了一种Rule-Based Reinforcement Learning, Logic-RL框架,旨在提升 LLM 的逻辑推理能力,在qwen2.5-7b-instruct…...

CVE-2017-5645(使用 docker 搭建)

介绍: 是一个与 Apache Log4j2 相关的安全漏洞,属于远程代码执行,它可能允许攻击者通过构造恶意的日志信息 在目标系统上执行任意代码 Log4j2 介绍 Log4j2 是 Apache 的一个日志记录工具,属于 Java 应用的日志框架,它是 Log4j 的升级版,性能更好,功能更多.它被广泛的适用于 J…...

conda install 和 pip install 的区别

conda install 和 pip install 是两个常用的包安装命令&#xff0c;但它们在很多方面存在差异。 1. 所属管理系统不同 1.1 conda install conda install 是Anaconda和Miniconda发行版自带的包管理工具 conda 的安装命令。conda 是一个跨平台的开源包管理系统和环境管理系统&…...

蓝桥杯备考:特殊01背包问题——》集合subset

我们划分成两个集合&#xff0c;实际上我们只需要看一部分就行了&#xff0c;也就是从集合的所有元素里挑出恰好满足集合总和的一半儿&#xff0c;当然&#xff0c;如果我们的集合总和是奇数的话&#xff0c;我们是无论如何也挑不出刚好一半儿的&#xff0c;因为我们没有小数&a…...

设计模式之外观模式:原理、实现与应用

引言 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过提供一个统一的接口来简化复杂系统的使用。外观模式隐藏了系统的复杂性&#xff0c;使得客户端可以通过一个简单的接口与系统交互。本文将深入探讨外观模式的原理、实现方式以及实…...

C#设计模式Demo——MVC

设计模式Demo——MVC 1.View1.1页面示例1.2View代码1.3修改界面以及代码 2.Model3.Controller4.数据结构5.枚举类型6.工具类6.1缓存信息6.2扩展类. 文件结构图 1.View 1.1页面示例 1.2View代码 using System; using System.Data; using System.Windows.Forms; using MVC模式…...

【sql靶场】第18-22关-htpp头部注入保姆级教程

目录 【sql靶场】第18-22关-htpp头部注入保姆级教程 1.回顾知识 1.http头部 2.报错注入 2.第十八关 1.尝试 2.爆出数据库名 3.爆出表名 4.爆出字段 5.爆出账号密码 3.第十九关 4.第二十关 5.第二十一关 6.第二十二关 【sql靶场】第18-22关-htpp头部注入保姆级教程…...

LabVIEW棉花穴播器排种自动监测系统

一、项目背景与行业痛点 1. 农业需求驱动 我国棉花主产区&#xff0c;种植面积常年超250万公顷&#xff0c;传统人工播种存在两大核心问题&#xff1a; 效率瓶颈&#xff1a;人均日播种面积不足0.5公顷&#xff0c;难以匹配规模化种植需求&#xff1b; 精度缺陷&#xff1a;人…...

【程序人生】成功人生架构图(分层模型)

文章目录 ⭐前言⭐一、根基层——价值观与使命⭐二、支柱层——健康与能量⭐三、驱动层——学习与进化⭐四、网络层——关系系统⭐五、目标层——成就与财富⭐六、顶层——意义与传承⭐外层&#xff1a;调节环——平衡与抗风险⭐思维导图 标题详情作者JosieBook头衔CSDN博客专家…...

golang开发支持onlyoffice的token功能

一直都没去弄token这块&#xff0c;想着反正docker run的时候将jwt置为false即可。 看了好多文章&#xff0c;感觉可以试试&#xff0c;但是所有文件几乎都没说思路。 根据我的理解和成功的调试&#xff0c;思路是&#xff1a; 我们先定义2个概念&#xff0c;一个是文档下载…...

Qt for WebAssembly程序中文乱码问题处理过程

一、环境 操作系统DeepinV23 Qt版本6.8.2 编程语言C 二、问题现象 Qt for WebAssembly应用在浏览器页面上英文字母显示正常&#xff0c;中文显示为乱码。 经测试分析原因为默认字体不能正常显示汉字。 三、处理过程 1.准备中文字体文件 从Windows下复制宋体简体字体文件…...

速通大厂测开

最近26届暑期实习招聘和25届春招已经开始&#xff0c;测开学习圈也有同学拿到offer了 今天分享一位25届秋招圈友快速拿到大厂测开offer的经历&#xff0c;希望对大家有所帮助 我是某211本科生&#xff0c;在去年暑假准备考研的间隙意外收获了某大厂测开实习offer&#xff0c;…...

基于Netty实现高性能HTTP反向代理

以下将分步骤实现一个基于Netty的高性能HTTP反向代理&#xff0c;支持动态路由、负载均衡和基础鉴权功能。 1. 项目依赖配置&#xff08;Maven&#xff09; 2. 定义路由规则 3. 实现HTTP反向代理服务端 4. 实现反向代理处理器 5. 实现基础鉴权 6. 性能优化策略 连接池管理…...

Spring Boot集成MyBatis与MySQL

Spring Boot集成MyBatis与MySQL开发全攻略 一、前言&#xff1a;现代Java持久层开发的选择 在微服务架构盛行的今天&#xff0c;Spring Boot以其"约定优于配置"的理念成为Java开发的事实标准。结合MyBatis这一灵活高效的ORM框架和MySQL这一成熟稳定的关系型数据库&…...

【NLP 37、实践 ⑨ NER 命名实体识别任务 LSTM + CRF 实现】

难过的事情我要反复咀嚼&#xff0c;嚼到它再也不能困扰我半分 —— 25.3.13 数据文件&#xff1a; 通过网盘分享的文件&#xff1a;Ner命名实体识别任务 链接: https://pan.baidu.com/s/1fUiin2um4PCS5i91V9dJFA?pwdyc6u 提取码: yc6u --来自百度网盘超级会员v3的分享 一、配…...

再学:函数可见性、特殊函数、修饰符

目录 1.可见性 2.合约特殊函数 constructor && getter 3. receive && fallback 4.view && pure 5.payable 6.自定义函数修饰符 modifier 1.可见性 public&#xff1a;内外部 private&#xff1a;内部 external&#xff1a;外部访问 internal&…...

基于Spring Boot的项目申报系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Web元件库 ElementUI元件库+后台模板页面(支持Axure9、10、11)

Axure是一款非常强大的原型设计工具&#xff0c;它允许设计师和开发者快速创建高保真原型&#xff0c;以展示应用或网站的设计和功能。通过引入各种元件库&#xff0c;如ElementUI元件库&#xff0c;可以极大地丰富Axure的原型设计能力&#xff0c;使其更加贴近实际开发中的UI组…...

若依excel工具类导出excel模板数据带下拉映射

导出模板代码&#xff0c;原理是combo属性 传递一个数组 里面是label下拉数组。 Overridepublic void downloadTemplate(HttpServletResponse response) {ExcelUtil<ThMachineryManageExcel> util new ExcelUtil<>(ThMachineryManageExcel.class);List<SysDist…...

孜然SEO静态页面生成系统V1.0

孜然SEO静态页面生成系统&#xff0c;1秒生成上万个不同的静态单页系统&#xff0c;支持URL裂变采集&#xff0c;采集的内容不会重复&#xff0c;因为程序系统自带AI重写算法&#xff0c;AI扩写算法&#xff0c;可视化的蜘蛛池系统让您更清楚的获取到信息&#xff01; 可插入二…...

Python爬虫-爬取汽车之家燃油车月销量榜数据

前言 本文是该专栏的第48篇,后面会持续分享python爬虫干货知识,记得关注。 在本文中,笔者已整理18篇汽车平台相关的爬虫项目案例。对此感兴趣的同学,可以直接翻阅查看。 而本文,笔者将以汽车之家平台为例子。基于Python爬虫,实现批量爬取全部“燃油车”的月销量数据。废…...

Blender-MCP服务源码3-插件开发

Blender-MCP服务源码3-插件开发 Blender-MCP服务源码解读-如何进行Blender插件开发 1-核心知识点 1&#xff09;使用Blender开发框架学习如何进行Blender调试2&#xff09;学习目标1-移除所有的Blender业务-了解如何MCP到底做了什么&#xff1f;3&#xff09;学习目标2-模拟MC…...

C语言和C++到底有什么关系?

C 读作“C 加加”&#xff0c;是“C Plus Plus”的简称。 顾名思义&#xff0c;C 就是在 C 语言的基础上增加了新特性&#xff0c;玩出了新花样&#xff0c;所以才说“Plus”&#xff0c;就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的关系。 C 语言是 1972 年由美国贝…...

【华三】路由器交换机忘记登入密码或super密码的重启操作

【华三】路由器交换机忘记登入密码或super密码的重启操作 背景步骤跳过认证设备&#xff1a;路由器重启设备翻译说明具体操作 跳过当前系统配置重启设备具体操作 背景 当console口的密码忘记&#xff0c;或者说本地用户的密码忘记&#xff0c;其实这时候是登入不了路由器的&am…...

DeepSeek-prompt指令-当DeepSeek答非所问,应该如何准确的表达我们的诉求?

当DeepSeek答非所问&#xff0c;应该如何准确的表达我们的诉求&#xff1f;不同使用场景如何向DeepSeek发问&#xff1f;是否有指令公式&#xff1f; 目录 1、 扮演专家型指令2、 知识蒸馏型指令3、 颗粒度调节型指令4、 时间轴推演型指令5、 极端测试型6、 逆向思维型指令7、…...

HOVER:人形机器人的多功能神经网络全身控制器

编辑&#xff1a;陈萍萍的公主一点人工一点智能 HOVER&#xff1a;人形机器人的多功能神经网络全身控制器HOVER通过策略蒸馏和统一命令空间设计&#xff0c;为人形机器人提供了通用、高效的全身控制框架。https://mp.weixin.qq.com/s/R1cw47I4BOi2UfF_m-KzWg 01 介绍 1.1 摘…...

HTML中滚动加载的实现

设置div的overflow属性&#xff0c;可以使得该div具有滚动效果&#xff0c;下面以div中包含的是table来举例。 当table的元素较多&#xff0c;以至于超出div的显示范围的话&#xff0c;观察下该div元素的以下3个属性&#xff1a; clientHeight是div的显示高度&#xff0c;scrol…...