目录
1. Echarts 简介
- Echarts 缩写来自 Enterprise Charts(商业级数据图表),是百度的一个开源的数据可视化工具
- Echarts 能够绘制 2D 和 3D 的饼状图、柱状图、折线图等几乎所有我们能够见到的图形
- Echarts 能够在 PC 端和移动设备上流畅运行,兼容当前绝大部分浏览器
- Echarts 是一个纯 JavaScript 的图表库,底层依赖轻量级的 Canvas 库 ZRender
- 官网: https://echarts.apache.org/zh/index.html
2. Echarts快速上手
使用步骤:
-
下载
-
复制/粘贴代码
-
代码分析
-
结论
实现:
1)下载
- 从官网下载
- npm 安装:
npm i echarts
- 按需定制
2) 复制代码 (5分钟上手 Echarts)
3) 分析代码
通过分析代码得出结论,使用 Echarts 绘制图形只需要做 5 件事情
① 引入 echarts.js 核心文件
② 定义一个用来显示图表的div (使用样式可以控制图表的宽高)
③ 初始化 echarts 实例 (此处要将div的dom对象作为参数传入)
④ 配置图表所需的数据
⑤ 调用 setOption 方法绘制图表
4)结论
- Echarts 使用是比较简单的,按照固定的五个步骤来写即可
- 想要产生不同的图表就需要不同的配置项,学习Echarts就是学习各种配置项
- 不要死记配置项,要熟练使用文档
第四步配置数据项是最为关键的,要掌握里面的主要配置项
- title: 标题组件,里面包含主标题、副标题等
- xAxios: 坐标系的 x 轴
- yAxios: 坐标系的 y 轴
- legend: 图例组件,用于展现不同系列的标记、颜色和名字
- series: 系列列表,配置具体的图标类型、数据等
- 配置项知道的越多越好,但是不要死记硬背,要学会使用文档
3. 柱状图
3.1 柱状图基本使用
const xData = ['华为 mate 40', '华为 P40', '小米10', 'vivo X60', 'oppo Reno5 pro']
const yData = [1608, 1323, 908, 809, 1010]
const option = {
title: {
text: '12月手机销售数据' // 图表标题
},
xAxis: {
type: 'category', // 类目轴
data: xData //显示在x轴的分类名称
},
yAxis: {
type: 'value' // 数值轴,y轴坐标不用设置,系统会自动产生
},
series: [
{
name: '销售数据'
type: 'bar', // 图表类型,bar代表是柱状图
data: yData // y轴数据
}
]
}
3.2 其他常见效果
- 最大值: series.markPoint
- 最小值: series.markPoint
- 平均值: series.markLine
series: [
{
type: 'bar',
data: yData,
markPoint: { //标记点
data: [
{ type: 'max', name: '最大值'},
{ type: 'min', name: '最小值'}
]
},
markLine: {
data: [
{ type: 'average', name: '平均值', lineStyle: {color: 'orange'},
{ type: 'max', name: '最大值'},
{ type: 'min', name: '最小值', lineStyle: {color: 'red'}}
]
}
}
]
- 数值显示: series. label
- 柱宽: series.barWidth
const option = {
title: {
text: '12月手机销售数据'
},
xAxis: {
type: 'category', // 类目轴
data: xData //显示在x轴的分类名称
},
yAxis: {
type: 'value' // 数值轴,y轴坐标不用设置,系统会自动产生
},
series: [
{
type: 'bar', // 图标类型,bar代表是柱状图
data: yData, // y轴数据
label: {
show: true, // 是否显示数据
position: 'insideTop' // 数据显示位置
},
barWidth: '30%', // 柱宽,可以使用百分百也可以使用像素
}
]
}
- 横向显示
交换 xAxis 和 yAxis 中的配置项即可
const option = {
title: {
text: '12月手机销售数据'
},
xAxis: {
type: 'value' // 数值轴,y轴坐标不用设置,系统会自动产生
},
yAxis: {
type: 'category', // 类目轴
data: xData //显示在x轴的分类名称
},
series: [
{
type: 'bar', // 图标类型,bar代表是柱状图
data: yData, // y轴数据
label: {
show: true,
position: 'insideTop'
},
barWidth: '50px',
}
]
}
4. 通用配置项
通用配置项就是所有图表都能使用的配置项
4.1 title
title: 用来设置主标题、副标题、标题样式等
title: {
text: '12月手机销售数据', // 主标题文字
subtext: '销售数据前5名', // 副标题文字
textStyle: { // 标题样式
color: 'red',
fontSize: 30
},
link: 'http://www.baidu.com', // 标题超链接
left: 'right' // 标题距离左侧的位置, left、right、center
}
4.2 tooltip
tooltip: 提示框组件,用来配置鼠标进入或者点击时的提示信息
tooltip: {
trigger: 'item', // 提示信息, itme、axis
triggerOn: 'mousemove', //提示方式, mousemove(默认)、click
formatter: '{b} <br /> {a}: {c}' // 提示框浮层内容格式器,支持字符串模板和回调函数两种形式。
}
- {a}: 系列名称,就是 series 中的 name
- {b}: 类目值, 就是 x 轴的分类名
- {c}: 数值, 当前分类对应的数值
tooltip: {
trigger: 'item',
triggerOn: 'click',
formatter: function (arg) {
return `${arg.name}: <br> ${arg.seriesName}: ${arg.value}`
}
}
4.3 toolbox
工具栏。内置有导出图片,数据视图,动态类型切换,数据区域缩放,重置五个工具。
toolbox: {
feature: {
saveAsImage: { // 保存为图片
type: 'png',
title: '保存为图片'
},
dataView: {}, // 数据视图
restore: {}, // 重置视图
dataZoom: {}, // 区域缩放
magicType: { // 图表切换
type: ['bar', 'line'] // 在柱状图和折线图之间切换
}
}
}
4.4 legend
legend: 图例,用于筛选系列,要和 series 配合使用
在 series 中可以有多组数据, 只要定义多个对象即可
legend:{
orient:'vertical',
left:'left',
data:[
{name:'11月销量',icon:'circle'},
{name:'12月销量',icon:'diamond'},
]
},
xAxis: {
data: xData
},
yAxis: {},
series: [
{
type: 'bar',
data: yData1,
name:'11月销量'
},
{
type: 'bar',
data: yData2,
name:'12月销量'
}
]
};
- series 是一个数组,在series中每多定义一个对象,就意味着多了一组数据
- legend 用来做数据筛选
- name: 系列数据的名称,该名称必须和 series 中的 name 值一致
- icon: 图标样式
5. 柱状图综合练习
展示如图所示
<script>
const xData = ['2017年', '2018年', '2019年', '2020年']
const yData1 = [650, 588, 720, 703]
const yData2 = [570, 820, 998, 409]
const yData3 = [768, 629, 529, 209]
const yData4 = [356, 763, 685, 358]
// 初始化
var barCharts = echarts.init(document.getElementById('bar'));
// 指定图表的配置项和数据
var option = {
title: {
text: '历年招生数量分布图',
textStyle:{
color:'orange',
fontSize:'26px',
},
},
toolbox:{
feature:{
dataZoom:{},
restore:{
title:'重置数据'
},
dataView:{
title:'数据视图',
textColor:'orange'
},
saveAsImage:{
type:'jpg',
},
magicType: {
type: ['line', 'bar']
}
}
},
legend:{
left:'center',
data:[
{name:'java',icon:'diamond'},
{name:'Web',icon:'diamond'},
{name:'Python',icon:'diamond'},
{name:'C/C++',icon:'diamond'},
]
},
xAxis: {
data: xData
},
yAxis: {},
series: [
{
type: 'bar',
data: yData1,
name:'java',
label:{
show:true,
position: 'insideTopLeft'
}
},
{
type: 'bar',
data: yData2,
name:'Web',
label:{
show:true,
position: 'insideTopLeft'
}
},
{
type: 'bar',
data: yData3,
name:'Python',
label:{
show:true,
position: 'insideTopLeft'
}
},
{
type: 'bar',
data: yData4,
name:'C/C++',
label:{
show:true,
position: 'insideTopLeft'
}
}
]
};
// 使用刚指定的配置项和数据显示图表。
barCharts.setOption(option);
</script>
6. 折线图
6.1 折线图基本使用
折线图和柱状图基本上是一样的
var xdata = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月',]
var ydata = [1580, 2198, 3672, 3856, 6978, 8125, 8210, 8186, 7568, 6321, 3890, 2210]
var option = {
title: {
text: '2020年销售数据'
},
xAxis: {
type: 'category',
data: xdata
},
yAxis: {},
series: [
{
name: '康师傅',
type: 'line',
data: ydata
}
]
}
6.2 通用配置
var option = {
title: {
text: '2020年销售数据'
},
xAxis: {
type: 'category',
data: xdata
},
legend: {
data: [
{name: '康师傅'},
{name: '统一'}
]
},
tooltip: {},
toolbox: {
feature: {
saveAsImage: {},
dataZoom:{},
magicType: {
type: ['line', 'bar']
}
}
},
yAxis: {},
series: [
{
name: '康师傅',
type: 'line',
data: ydata1
},
{
name: '统一',
type: 'line',
data: ydata2
}
]
}
6.2 其他效果
- 线条控制: series.smooth,折线(false)、平滑曲线(true)
- 填充风格: series.areaStyle,折线内部的填充风格
- color: 填充颜色
- opacity: 透明度
- 紧挨边缘: xAxis.boundaryGap , 值在y轴上(false),值在中间(true)
var option = {
title: {
text: '2020年销售数据'
},
xAxis: {
type: 'category',
boundaryGap: false,
data: xdata
},
yAxis: {},
series: [
{
name: '康师傅',
type: 'line',
data: ydata,
smooth: true,
areaStyle: {
color: 'red',
opacity: 0.3
}
}
]
}
7. 饼状图
实际工作时,我们通常都使用复制/粘贴,修改数据 的方式来使用 echarts
// 初始化
var pieCharts = echarts.init(document.getElementById('pie'));
var data = [
{value: 122000, name: '18岁以下'},
{value: 335380, name: '19-28岁'},
{value: 266892, name: '29-45岁'},
{value: 102020, name: '46-65岁'},
{value: 9782, name: '65岁以上'},
]
var ageAry = ['18岁以下', '19-28岁', '29-45岁', '46-65岁', '65岁以上']
// 指定图表的配置项和数据
var option = {
title: {
text: 'App用户年龄层分部图',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c} ({d}%)'
},
legend: {
orient: 'vertical',
left: 'left',
data: ageAry
},
series: [
{
name: '用户年龄层',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
data:data,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
// 使用刚指定的配置项和数据显示图表。
pieCharts.setOption(option);
8. 补:vue中使用Echarts
-
创建 Report.vue 组件,并正常显示
-
安装 echarts
-
在 Report.vue 组件中导入 echarts
-
绘制折线图
-
发送ajax请求获取数据,再绘制真正的图形
-
修改配置项
lodash.merge 合并数组 (深度合并)
main.js
// 将echarts对象挂载到Vue对象上
Vue.prototype.$echarts = window.echarts
Report.vue
<template>
<div>
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>数据统计</el-breadcrumb-item>
<el-breadcrumb-item>统计报表</el-breadcrumb-item>
</el-breadcrumb>
<el-card>
<div id="line" style="width:800px; height:600px">
</div>
</el-card>
</div>
</template>
<script>
// 导入echarts
// import echarts from '../../../public/static/echarts.min.js'
import _ from 'lodash'
export default {
// data () {},
// methods: {},
async mounted () {
// ajax
const { data: result } = await this.$http.get('reports/type/1')
console.log(result.data)
// 初始化echarts实例
const lineCharts = this.$echarts.init(document.getElementById('line'))
// 定义配置项
const option = {
xAxis: [
{ boundaryGap: false }
]
}
// 合并配置项
const res = _.merge(result.data, option)
// 使用刚指定的配置项和数据显示图表。
lineCharts.setOption(res)
}
}
</script>>