实现一个数据可视化小项目(Vue3 + ECharts5)

前言

最近在B站看到一个做ECharts项目的视频,自己好久都没使用过了,因此决定学习并总结记录下基于 Vue3 + ECharts5 开发数据可视化项目的具体做法

创建项目

  1. 使用vite创建项目

    npm create vite@latest

    根据命令提示符输入项目名称 ,选择框架为Vue,语言为JavaScript

    npm create vite echarts-projects --template vue

    通过附加的命令行选项直接指定项目名称和想要使用的模板快速创建

    注: Vite 需要 Node.js版本 14.18+,16+

  2. 创建好项目之后,切换文件目录到项目文件下,再下载依赖

    cd echarts-projects

    npm install

  3. 启动项目 npm run dev

在项目中使用tailwindcss(CSS 框架)

  1. 安装 tailwindcss以及相应的依赖

    npm install -D tailwindcss postcss autoprefixer

tailwindcss是直接应用CSS类来构建界面,而无需手动编写和管理大量的样式规则

  1. 使用命令npx tailwindcss init -p,创建tailwind.config.js和postcss.config.js配置文件

  2. 根据tailwindcss官方文档修改tailwind.config.js ,添加所有模板文件的路径,允许这些文件使用tailwindcss

  3. 将Tailwind指令添加到src目录下的style.css文件中

css 复制代码
@tailwind base; 
@tailwind components; 
@tailwind utilities;
  1. 在项目中使用tailwind的类来设置内容的样式,并运行项目

安装axios、echarts

npm i --save axios@1.4.0 echarts@5.4.2

使用 axios 来实现数据请求

在 src 目录下新建 utils 文件夹,在该文件夹下新建request.js,封装数据请求方法。同样在 src 目录下新建api文件夹,在其中创建请求具体api接口的方法,并在页面中引入接口方法,获取到相应数据

echarts的具体使用步骤

  1. 基于准备好的dom,通过 echarts.init() 方法,初始化echarts实例
  2. 构建option配置对象,指定配置项和数据(整个echarts样式)
  3. 最后通过 实例.setOption(option) 方法,将配置项设置给echarts实例

在 vite.config.js 文件中,配置路径别名

路径别名配置: 使用 @ 代替 src

实现页面布局

整体就是一个页面,分成左、中、右三大部分,其中每个部分的图表都封装成相应的组件,然后在主页面引入展示。页面样式都是使用tailwindcss的类控制(关于类的具体说明,需要查看文档)

注:vscode中安装Tailwind CSS IntelliSense 插件,可以进行tailwindcss的类提示

如:关于页面背景图的引用方式

图表的实现

1. 横向柱形图

a. 定义一个DOM 元素,并给该元素添加 ref 属性 ,用于获取DOM元素

html 复制代码
<div ref="target"></div>

b. 接收从父组件传递过来的数据

父组件通过v-bind(简写=>冒号)绑定一个数据(data),然后子组件通过defineProps接受传过来的值

js 复制代码
//父组件
<HorizontalBar :data="data.regionData
"/>

//子组件
const props = defineProps({
  data: {
    type: Object,
    required: true
  }
})

c. 实现横向柱形图

  1. 初始化echarts实例,保证视图渲染完毕后再执行 DOM 相关操作(需要放到生命周期的 onMounted 函数里)
  2. 创建一个renderChart()方法,在其中实现构建option配置对象(指定图表配置项和数据)、通过 setOption 方法显示图表。该renderChart()方法需要在初始化echarts实例之后进行调用

注:主要根据echarts官方文档, 配置options对象

3.使用watch()函数监听数据的变化(图表数据是变化的,因此使用了setInterval()函数隔3秒就重新获取数据),侦听到变化后执行的渲染图表的renderChart()方法

js 复制代码
watch(
  () => props.data, 
  renderChart
)

2. 环形图

基本和横向柱形图的实现一样,区别主要在于option配置对象的配置

绘制原理:

  • 一个环形图通过两个饼图绘制,分为上层和底层两部分,上层作为绘制进度,底层作为背景图。饼图通过让内外边距的距离(半径位置radius)减小,变为环形。
  • 多个环形的实现:动态修改每一对环的位置,让最外层的大小逐渐缩小,中心点位置保持一致。创建 getSeriesData()方法,生成对应的上层和底层 series 数据,进行渲染

ps: 这里主要展示了两个图表的具体实现,其它的图表就不一一记述了

相关推荐
月下点灯几秒前
🔄记住这张图,脑子跟着浏览器的事件循环(Event Loop)转起来了
前端·javascript·浏览器
邹小邹-AI4 分钟前
Rust + 前端:下一个十年的“王炸组合”
开发语言·前端·rust
行走在顶尖7 分钟前
vue3+ant-design-vue
前端
华仔啊42 分钟前
图片标签用 img 还是 picture?很多人彻底弄混了!
前端·html
lichong9511 小时前
XLog debug 开启打印日志,release 关闭打印日志
android·java·前端
烟袅1 小时前
作用域链 × 闭包:三段代码,看懂 JavaScript 的套娃人生
前端·javascript
风止何安啊1 小时前
收到字节的短信:Trae SOLO上线了?尝尝鲜,浅浅做个音乐播放器
前端·html·trae
抱琴_2 小时前
大屏性能优化终极方案:请求合并+智能缓存双剑合璧
前端·javascript
用户463989754322 小时前
Harmony os——长时任务(Continuous Task,ArkTS)
前端
fruge2 小时前
低版本浏览器兼容方案:IE11 适配 ES6 语法与 CSS 新特性
前端·css·es6