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 间隔显示标签 参考博客:Vue —— ECharts实现折线图 本文是在上…...
NVENC 视频编码器 API 编程指南 ( 中文转译 )
基于 NVIDIA Kepler™ 和更高版本 GPU 架构的 NVIDIA GPU 包含基于硬件的 H.264/HEVC/AV1 视频编码器(以下简称 NVENC)。NVENC 硬件采用 YUV/RGB 作为输入,并生成符合H.264/HEVC/AV1 标准的视频比特流。可以使用 NVIDIA 视频编解码器 SDK 中提…...
媒体发稿:澳门媒体发稿7个流程
推广平台澳门是一个重要的度假旅游娱乐终点,都是媒体领域热议的话题。对于澳门的媒体发稿营销推广要求,大家提供了一个简单易用的套餐系统软件,帮助大家在澳门媒体上发表推广文章。下面我们就根据7个阶段,详解构建这一套餐推广平台…...
Spring Web MVC入门(2)
学习Spring MVC Postman介绍 在软件工程中, 我们需要具有前后端分离的思想, 以降低耦合性. 但是在测试后端代码时,我们还得写前端代码测试,这是个令人头疼的问题. 那么我们如何测试自己的后端程序呢, 这就用到了一个工具: Postman. 界面介绍: 传参的介绍 1.普通传参, 也就…...
tomcat 实现会话绑定
Tomcat 后端服务器实现 Session ID会话保持 基础架构: 7-6 代理服务器nginx配置 7-3 tomcat 服务器 7-5 同理 测试: 此时刷新,会话ID一直在变,这样不好 如何解决呢? 不好的是确定ip之后,会一直在一台机上…...
Android Studio中快速修改包名
Android Studio中快速修改包名 假设原包名是com.abc.efg, 新包名是com.aaa.bbb 1、点击齿轮图标,把Compact Middle Packages前面的对勾取消,如果没有就忽略此步 2、在左侧项目栏中,选择Android, App-->java-->com,下面可以看…...
solr/ES 分词插件Jcseg设置自定义词库
步骤: 1、找到配置文件jcseg-core/target/classes/jcseg.properties修改配置: 下载地址: https://gitee.com/lionsoul/jcseg#5-如何自定义使用词库 lexicon.path {jar.dir}/../custom-word 设置lexicon路径,我们这个配置可以自定义…...
嵌入式硬件设计(一)|利用 NodeMCU-ESP8266 开发板和继电器结合APP“点灯•blinker”制作Wi-Fi智能开关(附有关硬件详细资料)
概述 本文主要讲述利用 NodeMCU-ESP8266 开发板和继电器通过手机 APP “ 点灯 • Blinker ” 制作一款能够由手机控制的WiFi 智能开关,从而实现智能物联。NodeMCU 是基于 Lua 的开源固件,ESP8266-NodeMCU是一个开源硬件开发板,支持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生态的蓬勃发展中,知名a16z Crypto的合伙人Jane Lippencott已确认出席即将于2024年4月9日至10日在香港数码港举行的Hack.Summit() 2024区块链开发者大会。作为亚洲首次举办的Hack.Summit(),此次大会将为全球区块链开发者及业…...
电脑那个部件坏了或者是哪个软件需要修复来看价钱
电脑维修价格表是多少? 价格取决于计算机的哪个部分损坏或哪个软件需要修复。 由于电脑中的部件非常多,而且会以各种奇怪的方式出现问题,下面我们就来看看具体的充电方法。 电脑维修价格表: 1. 重新安装系统。 安装XP系统通常需…...
GiT: Towards Generalist Vision Transformer through Universal Language Interface
GiT: Towards Generalist Vision Transformer through Universal Language Interface 相关链接:arxiv github 关键字:Generalist Vision Transformer (GiT)、Universal Language Interface、Multi-task Learning、Zero-shot Transfer、Transformer 摘要 …...
纽约时报起诉OpenAI和微软将决定未来LLM的发展
《纽约时报》诉OpenAI和微软案对未来LLM发展的重大影响 案件背景 《纽约时报》(NYT)近期对OpenAI和微软提起诉讼,指控OpenAI未经授权使用其受版权保护的内容来训练其AI模型,包括ChatGPT。NYT声称,OpenAI使用了数百万篇其文章,这…...
IntelliJ IDEA 面试题及答案整理,最新面试题
IntelliJ IDEA中的插件系统如何工作? IntelliJ IDEA的插件系统工作原理如下: 1、插件架构: IntelliJ IDEA通过插件架构扩展其功能,插件可以添加新的功能或修改现有功能。 2、安装和管理: 通过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)删除数据库 drop database …...
idea中database的一些用法
1、查看表结构 方法1,右键,选这个 方法2 双击表后,看到数据,点DDL 方法3 写SQL时,把鼠标放在表名上,可以快速查看表结构 2、表生成对应的实体类 表中右键,选择这2个,选择生成的路…...
外卖点餐系统 |基于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 文件: 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(); }最终…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
