简单记录一下在项目中使用全过程中遇到了的问题以及踩坑了不熟悉的配置项。前期使用发现配置项太多了,一脸懵逼,后来发现在实例上试配置项熟悉的快一些。以下是使用过程中摘抄官网以及实际使用记录。
还有很多没有了解的待以后慢慢学习
一、简单上手echart图表
1.获取ECharts.
可以通过以下4种方式获取。
1.官网下载界面
目前主要使用到了其中的 方法一:从 npm 安装。npm install echarts
-
- 在 ECharts 的 GitHub 上下载最新的
release
版本
- 在 ECharts 的 GitHub 上下载最新的
3.通过 npm 获取 echarts,
npm install echarts --save
,详见“在 webpack 中使用 echarts”4.cdn引入
2.引入 ECharts
3.绘制图表
- 在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。
可以通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的柱状图,下面是完整代码。
ECharts
二、在vue项目中的使用
-
-
npm
安装echarts
在3.1.1
版本之前 ECharts 在 npm 上的 package 是非官方维护的,从3.1.1
开始由官方 EFE 维护 npm 上 ECharts 和 zrender 的 package。
使用如下命令通过 npm 安装 ECharts:
npm install echarts --save
-
-
- 通过 npm 安装的 echarts 会出现在 myProject/node_modules 目录下,从而可以直接在项目代码中得到 echarts,例如:
- 2.1. 使用 CommonJS - require得到echarts(引入的是全部
var echarts = require('echarts')
var echarts = require('echarts');
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 绘制图表
myChart.setOption({
title: { text: 'ECharts 入门示例' },
tooltip: {},
xAxis: {
data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
},
yAxis: {},
series: [{
name: '销量',
type: 'bar',
data: [5, 20, 36, 10, 10, 20]
}]
});
- 2.2 引入Echarts使用 ES Module 得到echarts
import * as echarts from 'echarts';
三、具体使用
1、绘制饼状图像:
-
配置项属性
-
avoidLabel
- avoidLabelOverlap -
labelLine
- [labelLine](https://www.echartsjs.com/zh/option.html#series- pie.labelLine). 标签的视觉引导线样式,在 label 位置 设置为'outside'
的时候会显示视觉引导线
3.
legend
- legend
图例组件. 展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。
系列的颜色。
只能自己设置颜色数组进而去修改。color. 调色盘颜色列表。如果系列没有设置颜色,则会依次循环从该列表中取颜色作为系列颜色。
-
tooltip
. tooltip
提示框组件。tooltip.trigger string
[ default: 'item' ]
触发类型。
可选:(如下3个)
' item '
数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。'axis'
坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用。
在 ECharts 2.x 中只支持类目轴上使用 axis trigger,在 ECharts 3 中支持在 直角坐标系和极坐标系上的所有类型的轴。并且可以通过 axisPointer.axis 指定坐标轴。
-
'none'
什么都不触发。
-
tooltip.**formatter**
- tooltip.formatter
tooltip.formatter string, Function
提示框浮层内容格式器,支持字符串模板和回调函数两种形式。
1. 字符串模板
-
模板变量有 {a}
, {b}
,{c}
,{d}
,{e}
,分别表示系列名,数据名,数据值等。 在 trigger 为 'axis'
的时候,会有多个系列的数据,此时可以通过 {a0}
, {a1}
, {a2}
这种后面加索引的方式表示系列的索引。 不同图表类型下的 {a}
,{b}
,{c}
,{d}
含义不一样。 其中变量{a}
, {b}
, {c}
, {d}
在不同图表类型下代表数据含义为:
折线(区域)图、柱状(条形)图、K线图 :
{a}
(系列名称),{b}
(类目值),{c}
(数值),{d}
(无)散点图(气泡)图 :
{a}
(系列名称),{b}
(数据名称),{c}
(数值数组),{d}
(无)地图 :
{a}
(系列名称),{b}
(区域名称),{c}
(合并数值),{d}
(无)饼图、仪表盘、漏斗图:
{a}
(系列名称),{b}
(数据项名称),{c}
(数值),{d}
(百分比)
更多其它图表模板变量的含义可以见相应的图表的 label.formatter 配置项。
示例:
formatter: '{b0}: {c0}
{b1}: {c1}'
2, 回调函数
回调函数格式:
(params: Object|Array, ticket: string, callback: (ticket: string, html: string)) => string
第一个参数 params 是 formatter 需要的数据集。格式如下:
{
componentType: 'series',
// 系列类型
seriesType: string,
// 系列在传入的 option.series 中的 index
seriesIndex: number,
// 系列名称
seriesName: string,
// 数据名,类目名
name: string,
// 数据在传入的 data 数组中的 index
dataIndex: number,
// 传入的原始数据项
data: Object,
// 传入的数据值。在多数系列下它和 data 相同。在一些系列下是 data 中的分量(如 map、radar 中)
value: number|Array|Object,
// 坐标轴 encode 映射信息,
// key 为坐标轴(如 'x' 'y' 'radius' 'angle' 等)
// value 必然为数组,不会为 null/undefied,表示 dimension index 。
// 其内容如:
// {
// x: [2] // dimension index 为 2 的数据映射到 x 轴
// y: [0] // dimension index 为 0 的数据映射到 y 轴
// }
encode: Object,
// 维度名列表
dimensionNames: Array,
// 数据的维度 index,如 0 或 1 或 2 ...
// 仅在雷达图中使用。
dimensionIndex: number,
// 数据图形的颜色
color: string,
// 饼图的百分比
percent: number,
注:encode 和 dimensionNames 的使用方式,例如:
如果数据为:
dataset: {
source: [
['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]
]
}
则可这样得到 y 轴对应的 value:
params.value[params.encode.y[0]]
如果数据为:
dataset: {
dimensions: ['product', '2015', '2016', '2017'],
source: [
{product: 'Matcha Latte', '2015': 43.3, '2016': 85.8, '2017': 93.7},
{product: 'Milk Tea', '2015': 83.1, '2016': 73.4, '2017': 55.1},
{product: 'Cheese Cocoa', '2015': 86.4, '2016': 65.2, '2017': 82.5},
{product: 'Walnut Brownie', '2015': 72.4, '2016': 53.9, '2017': 39.1}
]
}
}
等等。。。
-
grid
。
直角坐标系内绘图网格,单个 grid 内最多可以放置上下两个 X 轴,左右两个 Y 轴。可以在网格上绘制折线图,柱状图,散点图(气泡图)。
在 ECharts 2.x 里单个 echarts 实例中最多只能存在一个 grid 组件,在 ECharts 3 中可以存在任意个 grid 组件。
-
xAxis.boundaryGap
-----boundaryGap
控制x轴坐标位置。
坐标轴两边留白策略,类目轴和非类目轴的设置和表现不一样。(category
-类目)
// boundaryGap值为false的时候,折线第一个点在y轴上
boundaryGap: false,
echarts-设置折线样式和X轴和Y轴的分割线样式
//GMV近30天变化趋势
trendOption: {
color: '#4359B7',
title: {
text: '支付订单的订单实付金额的总和',
bottom: 8,
left: 300,
textStyle: {
color: '#999',
fontWeight: 'narmal'
}
},
tooltip: {
trigger: 'axis',
formatter: '{b}(一)
{a} : {c}',
backgroundColor: '#fff',
borderColor: '#4359B7',
borderWidth: 1,
textStyle: {
color: '#666'
},
padding:[8,14]
},
xAxis: {
data: [],
type: 'category',
splitNumber: 10,
interval: 50, //强制设置坐标轴分割间隔
// boundaryGap: false,
nameGap: 26,
// nameTextStyle: {
// padding: [4,5,6,7], //上 右 下 左
// shadowColor: '#f00',
// width: '100px'
// },
axisTick: {
alignWithLabel: true
},
axisLine: {
onZero: false,
lineStyle: {
color: '#CCCCCC'
}
},
axisLabel: {
color: '#999'
}
},
yAxis: {
type: 'value',
data: [],
scale: true, //是否脱离0值
splitLine: { //分割线
show: true ,
lineStyle: {
color:'#ccc',
width: 1,
type: 'dotted'
}
},
axisLine: {
lineStyle: {
color: 'transparent',
width: 1, //这里是为了突出显示加上的
}
},
axisLabel: {
color: '#999'
},
// axisPointer: {
// label: {
// formatter: function (params) {
// return '降水量 ' + params.value
// + (params.seriesData.length );
// }
// }
// },
},
series: [{
name: '支付订单的订单实付金额的总和 ',
type: 'line',
data: [],
symbolSize: 6, //设置拐点大小
symbol:'circle', // 设置拐点为实心圆
// markLine: {
// silent: true,
// symbol: ['none', 'none'],
// data: [{
// yAxis: 0
// }, {
// yAxis: 2
// }, {
// yAxis: 4
// }, {
// yAxis: 6
// }, {
// yAxis: 8
// },{
// yAxis: 10
// }, {
// yAxis: 12
// }]
// }
}]
},
类目轴中 boundaryGap
可以配置为 true
和 false
。默认为 true
,这时候刻度只是作为分隔线,标签和数据点都会在两个刻度之间的带(band)中间。
非类目轴,包括时间,数值,对数轴,boundaryGap
是一个两个值的数组,分别表示数据最小值和最大值的延伸范围,可以直接设置数值或者相对的百分比,在设置 min 和 max 后无效。 示例:
boundaryGap: ['20%', '20%']
xAxis: {
// type: 'category', (类目
boundaryGap: false,
data: ['周一','周二','周三','周四','周五','周六','周日']
},
??好像有的不起作用。存疑
-
xAxis.axisTick.alignWithLabel
- axisTick.alignWithLabel
[ default: false ]
类目轴中在boundaryGap
为true
的时候有效,可以保证刻度线和标签对齐。如下图:
xAxis.axisLine.onZero boolean
- xAxis.axisLine.onZero
xAxis.axisLine.onZero boolean
[ default: true ]
X 轴或者 Y 轴的轴线是否在另一个轴的 0 刻度上,只有在另一个轴为数值轴且包含 0 刻度时有效。-
xAxis.axisLine.symbol string
- xAxis.axisLine.symbol stringxAxis.axisLine.symbol string, Array
[ default: 'none' ]
轴线两边的箭头。可以是字符串,表示两端使用同样的箭头;或者长度为 2 的字符串数组,分别表示两端的箭头。默认不显示箭头,即 'none'。两端都显示箭头可以设置为 'arrow',只在末端显示箭头可以设置为 ['none', 'arrow']。
xAxis.axisLine.lineStyle
- xAxis.axisLine.lineStyle
xAxis.axisLine.lineStyle.color Color
[ default: '#333' ]
坐标轴线线的颜色。xAxis.axisTick.lineStyle.color
- xAxis.axisTick.lineStyle.colo
xAxis.axisTick.lineStyle.color Color
刻度线的颜色,默认取 axisLine.lineStyle.color。
-
xAxis.axisLabel.formatter
xAxis.axisLabel.formatter string, Function
[ default: null ]
刻度标签的内容格式器,支持字符串模板和回调函数两种形式。
示例:
// 使用字符串模板,模板变量为刻度默认标签 {value}
formatter: '{value} kg'
// 使用函数模板,函数参数分别为刻度数值(类目),刻度的索引
formatter: function (value, index) {
// 格式化成月/日,只在第一个刻度显示年份
var date = new Date(value);
var texts = [(date.getMonth() + 1), date.getDate()];
if (index === 0) {
texts.unshift(date.getYear());
}
return texts.join('/');
}
-
xAxis.axisLabel
- xAxis.axisLabel
xAxis.axisLabel.color Color, Function
刻度标签文字的颜色,默认取 axisLine.lineStyle.color。支持回调函数,格式如下
(val: string) => Color
参数是标签的文本,返回颜色值,如下示例:
textStyle: {
color: function (value, index) {
return value >= 0 ? 'green' : 'red';
}
}
- 控制y轴坐标折线虚线展示。
yAxis: {
// splitLine: {
// show: false
// }
},
虚线展示:
series: [{
type: 'line',
data: [820, 932, 901, 934, 1290, 1330, 1320],
markLine: {
silent: true,
data: [{
yAxis: 300
}, {
yAxis: 600
}, {
yAxis: 900
}, {
yAxis: 1200
}, {
yAxis: 1500
}]
}
}]
});
折线图
:折线图
折线图中x坐标轴展示:
情况一:
情况二:
折线图中y轴
以上为第一次在项目中使用echarts图表不完全小结。