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

Vue | 使用 ECharts 绘制折线图

目录

一、安装和引入 ECharts

二、使用 ECharts

2.1  新增 div 盒子

2.2  编写画图函数

2.3  完整代码结构

三、各种小问题

3.1  函数调用问题

3.2  数据格式问题

3.3  坐标轴标签问题

3.4  间隔显示标签


参考博客:Vue —— ECharts实现折线图

本文是在上述博客的基础上,补充介绍了我们可能会遇到的问题。

最终实现效果如下:

一、安装和引入 ECharts

在项目的根目录下,打开终端输入:

npm install echarts -S

在需要使用 ECharts 的 Vue 页面的 script 部分引入:

<script>
import * as echarts from 'echarts'
</script>

二、使用 ECharts

2.1  新增 div 盒子

在 Vue 页面的 template 部分新增一个 div 盒子,它是用来装折线图的:

<div id="main" style="width: 100%; height: 520px; background: #fff"></div>

id 是必须要写的,到时候 ECharts 会根据它来加载折线图,不过里面的名称可以自己定义。

2.2  编写画图函数

我们需要在 methods 中自定义一个 drawLine 函数(见后文代码)。函数名可以自定义,但是 id 参数是一定要给的。这里传的 id 就是刚才那个 div 盒子的 id,我的理解是,id 是用于让 ECharts 确定该在哪儿绘制折线图的。

2.3  完整代码结构

根据参考博客,完整代码如下。注意,代码中带有 “// 自定义” 的地方才是我们需要修改的。其他代码都是对折线图样式的设计,建议在能够成功展示数据之后修改:

<template><div><!-- 装ECharts的容器--><div id="main" style="width: 100%; height: 520px; background: #fff"></div></div>
</template><script>
import * as echarts from "echarts";export default {data() {return {charts: "",opinionData: ["155", "400", "900", "800", "300", "900", "270"], // 数据};},methods: {drawLine(id) {// 初始化折线图this.charts = echarts.init(document.getElementById(id));// 设置折线图数据和样式this.charts.setOption({title: {left: "3%",top: "5%",text: "最近一周订单数量", // 自定义},tooltip: {trigger: "axis",},legend: {align: "right",left: "3%",top: "15%",data: ["近一周"], // 自定义},grid: {top: "30%",left: "5%",right: "5%",bottom: "5%",containLabel: true,},toolbox: {feature: {saveAsImage: {},},},// 自定义:设置x轴刻度xAxis: {type: "category",boundaryGap: true,axisTick: {alignWithLabel: true,},// 自定义标签data: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],},// 自定义:设置y轴刻度yAxis: {type: "value",boundaryGap: true,splitNumber: 4,interval: 250,},// 设置数据series: [{name: "近一周", // 自定义type: "line",stack: "总量", // 自定义data: this.opinionData, // 自定义areaStyle: {color: {type: "linear",x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0,color: "rgb(255,200,213)",},{offset: 1,color: "#ffffff",},],global: false,},},itemStyle: {color: "rgb(255,96,64)",lineStyle: {color: "rgb(255,96,64)",},},},],});},},
};
</script>

三、各种小问题

3.1  函数调用问题

在我的 Vue 页面中,我是要先使用一个函数去获得折线图的数据,而不是像参考博客中那样写死的数据。因此,我绘制折线图的 drawLine 函数,是在获取数据的 fetchData 函数中调用的:

fetchData() {fetchDataAPI.fetchData().then((response) => {this.opinionData = response.data;// 画图setTimeout(() => {this.drawLine("main");}, 500);});
},

注意:里面的函数名、API 名和 API 函数名请换成自己的!

使用 setTimeout 延时函数是为了解决 Initialize failed: invalid dom 问题,点击链接可以查看问题详情。

3.2  数据格式问题

以下两种格式都满足 ECharts 的要求:

// 格式一
opinionData: ["100", "200", "300"]// 格式二
opinionData: [[0, "100"], [1, "200"], [2, "300"]]

我的理解是:针对格式一,在数组中只存放数据的 y 轴坐标,默认各个数据的 x 轴坐标等于数据的排列顺序;针对格式二,在二维数组中存放数据的 x 轴和 y 轴坐标。其中,0、1 和 2 分别是三个数据的 x 轴坐标,且应为 int 型。个人建议,如果没有顺序要求,采用格式一比较方便。

后文会提到,由于 x 轴的 type 是 category,因此所谓的 x 轴坐标,其实就是数据排列的顺序。

据我目前所知,到时候 x 轴上有几个刻度和折线上有几个点完全是由数据的个数决定的。所谓的设置 x 轴,其实设置的是 x 轴的文字标签。注意,数据和文字标签之间没有任何的固有联系!!!

3.3  坐标轴标签问题

设置坐标轴标签。可以看见,x 轴的 type 是 “category”,y 轴的 type 是 “value”。个人理解,它们分别是:文字标签和数值标签。文字标签和数据之间没有对应关系,数值标签和数据的 y 轴坐标是自动对齐的。参考博客的代码如下:

// 自定义:设置x轴刻度
xAxis: {type: "category",boundaryGap: true,axisTick: {alignWithLabel: true,},// 自定义标签data: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],
},// 自定义:设置y轴刻度
yAxis: {type: "value",boundaryGap: true,splitNumber: 4,interval: 250,
},

我觉得 y 轴刻度比较容易设置(比如:设置它的最大、最小值和值之间的间隔),问问 ChatGPT 怎么搞就行了。难点在于,我有 24 个数据,但是我希望 x 轴刻度的标签是每两个才显示一个,也就是如何只为部分刻度设置标签。

注意:自定义标签也可以传变量,以实现动态更新的标签。

3.4  间隔显示标签

研究了很久,解决方法就是设置 axisLabel 属性,代码如下:

xAxis: {type: "category",boundaryGap: true,axisTick: {alignWithLabel: true,},// 自定义标签data: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"],// 间隔显示标签axisLabel: {formatter: function (value, index) {return index % 2 == 0 ? value : "";},},
},

里面的 formatter 函数处理的就是 data 自定义标签。index 指明当前标签的序号,value 是当前标签的内容。这里我是每两个显示一个,因此判断条件为 index % 2 == 0 是否成立。若成立则显示标签内容 value;反之则不显示,即 "" 空字符串。

总结:一开始还是为每个刻度都设置标签,即 24 个(我上面代码就没写了哈,还是用的参考博客的 data),但是到时候只显示指定位置上的标签。


我自己踩了很多坑,希望这篇博客能够帮到你 ^-^

相关文章:

Vue | 使用 ECharts 绘制折线图

目录 一、安装和引入 ECharts 二、使用 ECharts 2.1 新增 div 盒子 2.2 编写画图函数 2.3 完整代码结构 三、各种小问题 3.1 函数调用问题 3.2 数据格式问题 3.3 坐标轴标签问题 3.4 间隔显示标签 参考博客&#xff1a;Vue —— ECharts实现折线图 本文是在上…...

NVENC 视频编码器 API 编程指南 ( 中文转译 )

基于 NVIDIA Kepler™ 和更高版本 GPU 架构的 NVIDIA GPU 包含基于硬件的 H.264/HEVC/AV1 视频编码器&#xff08;以下简称 NVENC&#xff09;。NVENC 硬件采用 YUV/RGB 作为输入&#xff0c;并生成符合H.264/HEVC/AV1 标准的视频比特流。可以使用 NVIDIA 视频编解码器 SDK 中提…...

媒体发稿:澳门媒体发稿7个流程

推广平台澳门是一个重要的度假旅游娱乐终点&#xff0c;都是媒体领域热议的话题。对于澳门的媒体发稿营销推广要求&#xff0c;大家提供了一个简单易用的套餐系统软件&#xff0c;帮助大家在澳门媒体上发表推广文章。下面我们就根据7个阶段&#xff0c;详解构建这一套餐推广平台…...

Spring Web MVC入门(2)

学习Spring MVC Postman介绍 在软件工程中, 我们需要具有前后端分离的思想, 以降低耦合性. 但是在测试后端代码时,我们还得写前端代码测试,这是个令人头疼的问题. 那么我们如何测试自己的后端程序呢, 这就用到了一个工具: Postman. 界面介绍: 传参的介绍 1.普通传参, 也就…...

tomcat 实现会话绑定

Tomcat 后端服务器实现 Session ID会话保持 基础架构&#xff1a; 7-6 代理服务器nginx配置 7-3 tomcat 服务器 7-5 同理 测试&#xff1a; 此时刷新&#xff0c;会话ID一直在变&#xff0c;这样不好 如何解决呢&#xff1f; 不好的是确定ip之后&#xff0c;会一直在一台机上…...

Android Studio中快速修改包名

Android Studio中快速修改包名 假设原包名是com.abc.efg&#xff0c; 新包名是com.aaa.bbb 1、点击齿轮图标&#xff0c;把Compact Middle Packages前面的对勾取消&#xff0c;如果没有就忽略此步 2、在左侧项目栏中&#xff0c;选择Android, App-->java-->com,下面可以看…...

solr/ES 分词插件Jcseg设置自定义词库

步骤&#xff1a; 1、找到配置文件jcseg-core/target/classes/jcseg.properties修改配置&#xff1a; 下载地址: https://gitee.com/lionsoul/jcseg#5-如何自定义使用词库 lexicon.path {jar.dir}/../custom-word 设置lexicon路径&#xff0c;我们这个配置可以自定义&#xf…...

嵌入式硬件设计(一)|利用 NodeMCU-ESP8266 开发板和继电器结合APP“点灯•blinker”制作Wi-Fi智能开关(附有关硬件详细资料)

概述 本文主要讲述利用 NodeMCU-ESP8266 开发板和继电器通过手机 APP “ 点灯 • Blinker ” 制作一款能够由手机控制的WiFi 智能开关&#xff0c;从而实现智能物联。NodeMCU 是基于 Lua 的开源固件&#xff0c;ESP8266-NodeMCU是一个开源硬件开发板&#xff0c;支持WiFi功能&a…...

CSS扩展选择器

文章目录 1. 并集选择器2. 交集选择器3. 后代选择器4. 子代选择器5. 兄弟选择器5.1. 相邻兄弟选择器5.2. 通用兄弟选择器 6. 属性选择器7. 伪类选择器7.1. 动态伪类7.2. 结构伪类7.3. 否定伪类 8. 伪元素选择器9. Google 改进案例 1. 并集选择器 选中多个选择器对应的元素。一…...

知名Web3投资基金a16z合伙人Jane Lippencott确认出席Hack.Summit() 2024区块链开发者大会

在区块链技术的风起云涌和Web3生态的蓬勃发展中&#xff0c;知名a16z Crypto的合伙人Jane Lippencott已确认出席即将于2024年4月9日至10日在香港数码港举行的Hack.Summit() 2024区块链开发者大会。作为亚洲首次举办的Hack.Summit()&#xff0c;此次大会将为全球区块链开发者及业…...

电脑那个部件坏了或者是哪个软件需要修复来看价钱

电脑维修价格表是多少&#xff1f; 价格取决于计算机的哪个部分损坏或哪个软件需要修复。 由于电脑中的部件非常多&#xff0c;而且会以各种奇怪的方式出现问题&#xff0c;下面我们就来看看具体的充电方法。 电脑维修价格表&#xff1a; 1. 重新安装系统。 安装XP系统通常需…...

GiT: Towards Generalist Vision Transformer through Universal Language Interface

GiT: Towards Generalist Vision Transformer through Universal Language Interface 相关链接&#xff1a;arxiv github 关键字&#xff1a;Generalist Vision Transformer (GiT)、Universal Language Interface、Multi-task Learning、Zero-shot Transfer、Transformer 摘要 …...

纽约时报起诉OpenAI和微软将决定未来LLM的发展

《纽约时报》诉OpenAI和微软案对未来LLM发展的重大影响 案件背景 《纽约时报》(NYT)近期对OpenAI和微软提起诉讼&#xff0c;指控OpenAI未经授权使用其受版权保护的内容来训练其AI模型&#xff0c;包括ChatGPT。NYT声称&#xff0c;OpenAI使用了数百万篇其文章&#xff0c;这…...

IntelliJ IDEA 面试题及答案整理,最新面试题

IntelliJ IDEA中的插件系统如何工作&#xff1f; IntelliJ IDEA的插件系统工作原理如下&#xff1a; 1、插件架构&#xff1a; IntelliJ IDEA通过插件架构扩展其功能&#xff0c;插件可以添加新的功能或修改现有功能。 2、安装和管理&#xff1a; 通过IDEA内置的插件市场下载…...

T1.数据库MySQL

二.SQL分类 2.1 DDL 2.1.1数据库操作 1). 查询所有数据库 show databases ; 2). 查询当前数据库 select database(); 3)创建数据库 create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则] ; 4&#xff09;删除数据库 drop database …...

idea中database的一些用法

1、查看表结构 方法1&#xff0c;右键&#xff0c;选这个 方法2 双击表后&#xff0c;看到数据&#xff0c;点DDL 方法3 写SQL时&#xff0c;把鼠标放在表名上&#xff0c;可以快速查看表结构 2、表生成对应的实体类 表中右键&#xff0c;选择这2个&#xff0c;选择生成的路…...

外卖点餐系统 |基于springboot框架+ Mysql+Java+JSP技术+Tomcat的外卖点餐系统 设计与实现(可运行源码+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 骑手功能模块 商家功能模块 管理员功能登录前台功能效果图 用户功能模块 系统功能设…...

挑战杯 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…...

Node.js 自带的 http 模块来实现一个简单的本地服务器

1.创建一个 server.js 文件&#xff1a; const http require(http); const fs require(fs); const path require(path);const server http.createServer((req, res) > {// 获取请求的文件路径const filePath path.join(__dirname, dist, req.url);// 读取文件内容并返…...

c++ 设计模式模版方法

最初版本 #pragma onceclass Library { public:void Step1(){}void Step3(){}void Step5(){} };class Appliacation { public:void Step2(){}void Step4(){} };int main() {Library lib;Appliacation app;lib.Step1();app.Step2();lib.Step3();app.Step4();lib.Step5(); }最终…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...