目录
前言
正文
一、ECharts技术简介
二、Vue3集成Echarts
1、安装Echarts
2、引入方式
三、Echarts基础篇
1、图表容器及大小
2、样式
2.1 颜色主题
3、坐标轴
5、数据集
5.1 在series中设置数据集
5.2 在dataset中设置数据集
四、常用图表实操
1、柱状图
2、饼图
课后作业
前言
在这个课程中,我们将学习一款强大的开源数据可视化工具——ECharts。在当今数据驱动的时代,数据可视化变得越来越重要。它能够帮助我们更好地理解和分析数据,从而做出更明智的决策。ECharts,全称Easy Chart,是一款由百度开源的数据可视化库,基于JavaScript,可以在网页中展示丰富的图表类型,如折线图、柱状图、饼图等。通过课程的学习,掌握ECharts数据可视化技术,并在实际项目开发中得心应手使用ECharts数据可视化技术,提升自身的技术能力与价值。
正文
一、ECharts技术简介
ECharts是一款基于Javascript的数据可视化图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库ZRender(一个全新的轻量级canvas类库),创建了坐标系,图例,提示,工具箱等基础组件,并在此上构建出折线图(区域图)、柱状图(条状图)、散点图(气泡图)、饼图(环形图)、K线图、地图、力导向布局图以及和弦图,同时支持任意维度的堆积和多图表混合展现,提供直观,交互丰富,可高度个性化定制的数据可视化图表。
二、Vue3集成Echarts
1、安装Echarts
使用包管理器安装Echarts命令如下:
#使用npm安装
npm i ecahrts --save
#使用yarn安装
yarn add echarts --save
2、引入方式
下面列举两种echarts引入方式,最后打印出echarts对象如下图所示,说明引入成功
-
ES6引入方式:
<script setup>import * as echarts from 'echarts'console.log(echarts) </script>
-
App.vue 下 provide() ,子组件下 inject() 方式
<!-- App.vue -->
<template><ImportDemo1></ImportDemo1>
</template>
<script setup>
import { provide } from 'vue';
import * as echarts from 'echarts'
import ImportDemo1 from './components/ImportDemo1.vue';
provide('echarts',echarts)
</script>
<!-- ImportDemo1.vue -->
<script setup>
import { inject } from 'vue';
const echarts = inject('echarts')
console.log(echarts)
</script>
三、Echarts基础篇
1、图表容器及大小
通常来说,需要在 HTML 中先定义一个 <div>
节点,并且通过 CSS 使得该节点具有宽度和高度。初始化的时候,传入该节点,图表的大小默认即为该节点的大小,除非声明了 opts.width
或 opts.height
将其覆盖。返回值即是Echarts图表实例的容器。代码如下:
<template><div id="myChart1" style="width: 600px;height: 500px;"></div>
</template>
<script setup>
import { inject,onMounted } from 'vue';
const echarts = inject('echarts')
onMounted(() => {// myChart1是图表实例的容器const myChart1 = echarts.init(document.getElementById('myChart1'))
})
</script>
2、样式
2.1 颜色主题
最简单的更改全局样式的方式,是直接采用颜色主题(theme)。例如,可以通过切换深色模式,直接看到采用主题的效果。ECharts5 除了一贯的默认主题外,还内置了'dark'
主题。可以像这样切换成深色模式:
const myChart1 = echarts.init(document.getElementById('myChart1'),'dark')
3、坐标轴
坐标轴即为直角坐标系中的 x/y 轴。x 轴和 y 轴都由轴线、刻度、刻度标签、轴标题四个部分组成。部分图表中还会有网格线来帮助查看和计算数据
普通的二维数据坐标系都有 x 轴和 y 轴,通常情况下,x 轴显示在图表的底部,y 轴显示在左侧,一般配置如下:
const option = {xAxis: {// ...},yAxis: {// ...}
};
x 轴常用来标示数据的维度,维度一般用来指数据的类别,是观察数据的角度,例如“销售时间” “销售地点” “产品名称”等。y 轴常常用来标示数据的数值,数值是用来具体考察某一类数据的数量值,也是我们需要分析的指标,例如“销售数量”和“销售金额”等。
const option = {xAxis: {type: 'time',name: '销售时间'// ...},yAxis: {type: 'value',name: '销售数量'// ...}// ...
};
在二维数据中,轴也可以有多个。ECharts 中一般情况下单个 grid 组件最多只能放两个 x/y 轴,多于两个 x/y 轴需要通过配置 offset 属性防止同个位置多个轴的重叠。两个 x 轴显示在上下,两个 y 轴显示在左右两侧。
const option = {xAxis: {type: 'time',name: '销售时间'// ...},yAxis: [{type: 'value',name: '销售数量'// ...},{type: 'value',name: '销售金额'// ...}]// ...
};
5、数据集
数据集是专门用来管理数据的组件。虽然每个系列都可以在 series.data
中设置数据,但是从 ECharts4 支持数据集开始,更推荐使用数据集来管理数据。因为这样,数据可以被多个组件复用,也方便进行 “数据和其他配置” 分离的配置风格。毕竟,在运行时,数据是最常改变的,而其他配置大多并不会改变。
5.1 在series中设置数据集
const option = {xAxis: {type: 'category',data: ['Matcha Latte', 'Milk Tea', 'Cheese Cocoa', 'Walnut Brownie']},yAxis: {},series: [{type: 'bar',name: '2015',data: [89.3, 92.1, 94.4, 85.4]},{type: 'bar',name: '2016',data: [95.8, 89.4, 91.2, 76.9]},{type: 'bar',name: '2017',data: [97.7, 83.1, 92.5, 78.1]}]
};
// 渲染图表
myChart1.setOption(option);
效果:
这种方式的优点是,适于对一些特殊的数据结构(如“树”、“图”、超大数据)进行一定的数据类型定制。 但是缺点是,常需要用户先处理数据,把数据分割设置到各个系列(和类目轴)中。此外,不利于多个系列共享一份数据,也不利于基于原始数据进行图表类型、系列的映射安排。
5.2 在dataset中设置数据集
数据设置在 数据集(dataset)
中,会有这些好处:
-
能够贴近数据可视化常见思维方式:(I)提供数据,(II)指定数据到视觉的映射,从而形成图表。
-
数据和其他配置可以被分离开来。数据常变,其他配置常不变。分开易于分别管理。
-
数据可以被多个系列或者组件复用,对于大数据量的场景,不必为每个系列创建一份数据。
-
支持更多的数据的常用格式,例如二维数组、对象数组等,一定程度上避免使用者为了数据格式而进行转换。
下面是一个最简单的 dataset
的例子:
const option = {legend: {},tooltip: {},dataset: {// 提供一份数据。source: [['product', '2015', '2016', '2017'],['Matcha Latte', 43.3, 85.8, 93.7],['Milk Tea', 83.1, 73.4, 55.1],['Cheese Cocoa', 86.4, 65.2, 82.5],['Walnut Brownie', 72.4, 53.9, 39.1]]},// 声明一个 X 轴,类目轴(category)。默认情况下,类目轴对应到 dataset 第一列。xAxis: { type: 'category' },// 声明一个 Y 轴,数值轴。yAxis: {},// 声明多个 bar 系列,默认情况下,每个系列会自动对应到 dataset 的每一列。series: [{ type: 'bar' }, { type: 'bar' }, { type: 'bar' }]
};
// 渲染图表
myChart1.setOption(option);
四、常用图表实操
1、柱状图
需求:上周一至周日平台每日的独立访客量为 120, 200, 150, 80, 70, 110, 130,使用柱状图做数据展示。
下面演示实现方法:
-
在src/component目录下创建bar.vue文件,写入Vue3模板代码
<template> </template> <script setup> </script> <style> </style>
-
设置图表容器以及大小
<template><div id="myBar" style="width: 600px;height: 500px;"> </div> </template>
-
获取Echarts实例
<script setup> import * as echarts from 'echarts' onMounted(() => {const myBarChart = echarts.init(document.getElementById('myBar')) }) </script>
-
配置柱状图参数并渲染图表
<script setup> import { onMounted } from 'vue'; import * as echarts from 'echarts' onMounted(() => {const myBarChart = echarts.init(document.getElementById('myBar'))const option = {title: { text: '上周独立访客量', // 设置图表标题left: 'center' // 设置居中},xAxis: {type: 'category', // 标明X轴为类目轴data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] },yAxis: {type: 'value',name:"/人" // y轴名称},series: [{data: [120, 200, 150, 80, 70, 110, 130], // 每个类目的数据type: 'bar' // 指定图表类型为柱状图}]}myBarChart.setOption(option) // 渲染图表 }) </script>
-
运行效果如下:
2、饼图
需求:展示本站点用户来源占比,数据如下:
搜索引擎:1048人 直接用户:735人 电子邮件:580人 合作广告:484人 视频广告:300
-
在src/component目录下创建pie.vue文件,写入Vue3模板代码
<template> </template> <script setup> </script> <style> </style>
-
设置图表容器以及大小
<template><div id="myPie" style="width: 600px;height: 500px;"> </div> </template>
-
获取Echarts实例
<script setup> import * as echarts from 'echarts' onMounted(() => {const myBarChart = echarts.init(document.getElementById('myPie')) }) </script>
-
配置柱状图参数并渲染图表
<script setup> import { onMounted } from 'vue'; import * as echarts from 'echarts' onMounted(() => {const myBarChart = echarts.init(document.getElementById('myPie'))const option = {title: {text: '本站点用户来源', // 设置图表标题left: 'center' // 设置居中},series: [{name: 'Access From',type: 'pie',data: [{ value: 1048, name: '搜索引擎' },{ value: 735, name: '直接用户' },{ value: 580, name: '电子邮件' },{ value: 484, name: '合作广告' },{ value: 300, name: '视频广告' }]}]}myBarChart.setOption(option) }) </script>
-
运行效果如下:
课后作业
根据题目需求和数据,参考Echarts官网示例:Examples - Apache ECharts选择合理的图表进行展示。
社交媒体平台希望了解用户地区分布对比,请你选择合适的图表进行展示。数据如下:
地区 用户数量 北京 150 上海 200 广州 120 深圳 130
下面是用饼图实现上述需求,代码如下:
<script setup>
import { onMounted } from 'vue';
import * as echarts from 'echarts'
onMounted(() => {const myBarChart = echarts.init(document.getElementById('myPie'))const option = {title: {text: '用户地区分布对比', // 设置图表标题left: 'center' // 设置居中},series: [{name: 'Access From',type: 'pie',data: [{ value: 150, name: '北京' },{ value: 200, name: '上海' },{ value: 120, name: '广州' },{ value: 130, name: '深圳' }]}]}myBarChart.setOption(option)
})
</script>