<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div style="width: 600px; height: 400px;"></div>
<!-- js -->
<script src="lib/echarts.min.js"></script>
<script>
//初始化echarts
var myChart = echarts.init(document.querySelector('div'))
//配置项
var option = {
xAxis:{
type: 'category', //类目轴
data: ['小明', '小红', '小王']
},
yAxis: {
type: 'value' //数值轴
},
series: [
{
name: '语文',
type: 'bar',
data: [79, 92, 87]
}
]
}
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>
</body>
</html>
xAxis:直角坐标系中x轴
yAxis:直角坐标系中的y轴
series:系列列表。每个系通过type决定自己的图表类型
柱状图的基本配置:
//最大/最小值
series: {
// 最大/小值
markPoint: {
data: [
{ type: 'max', name: '最大值'},
{ type: 'min', name: '最小值'}
]
}
}
//平均值
series: {
// 平均值
markLine: {
data: [
{
type: 'average', name: '平均值'
}
]
}
}
//数值显示
series: {
//数值显示
label: {
show: true
}
//柱状宽度
series: {
//柱状宽度
barWidth: '60%',
data: [88, 92, 63, 77, 94, 80, 72, 86]
}
通用配置
title:标题配置
var option = {
//标题
title: {
text: '成绩展示',
textStyle: {
color: 'pink'
},
borderWidth: 5,
borderColor: 'black',
borderRadius: 5,
left: 50,
top: 10
}
}
tooltip: 提示框组件
用于配置鼠标滑过或点击图表是显示的显示框
触发器类型:trigger
item, axis
//显示提示框
var option = {
tooltip: {
trigger: 'item'
}
}
//显示提示框
var option = {
tooltip: {
trigger: 'axis'
// 设置背景
axisPointer: {
type: 'line',
z: 0,
lineStyle: {
width: 66,
color: 'red'
}
}
}
}
触发时机:triggerOn
mouseover,click
var option = {
//显示提示框
tooltip: {
//触发的时机
triggerOn: 'click'
},
格式化:formatter
字符串模板
模板变量有 {a}
, {b}
,{c}
,{d}
,{e}
,分别表示系列名,数据名,数据值等。 在 trigger 为 'axis'
的时候,会有多个系列的数据,此时可以通过 {a0}
, {a1}
, {a2}
这种后面加索引的方式表示系列的索引。
var option = {
//显示提示框
tooltip: {
//字符串模板
formatter: '{c}'
},
回调函数
var option = {
//显示提示框
tooltip: {
//回调函数
formatter: function(e){
console.log(e)
}
},
toolbox: ECharts提供的工具栏
内置有导出图片,数据视图,动态类型切换,数据区域缩放,重置五个工具
显示工具栏feature
saveAslmage, dataView, restore, dataZoom, magicType
var option = {
toolbox: {
feature: {
saveAsImage: {},//导出图片
dataView: {},// 数据视图
restore: {}, // 重置
dataZoom: {}, // 数据区域缩放
magicType: {
type: ['bar', 'line']
}, //动态图表类型切换
}
},
},
legend:图列
用于筛选系列,需要和series配合使用
legend中的data是一个数组
legend中的data的值需要和series数组中某组数据的name值一致
var option = {
// 图列
legend: {
data: ['语文', '数学'],
orient: 'vertical', // 改变图例为竖直
itemWidth: 20px, // 每项图例的宽
itemHeight: 13px, // 每项图例的高
itemGap: 10px, 每项图例的间距
textStyle: {
fontSize: 12px // 字体大小
}
},
},
折线图
随着时间的变化趋势
标记
最大/小值
markPoint
series: [
{
name: '销量',
type: 'line',
data: yDataArr,
//最大/小值
markPoint: {
data: [
{
type: 'max'
},
{
type: 'min'
}
]
},
}
]
平均值
markLine
series: [
{
// 平均值
markLine: {
data: [
{
type: 'average'
}
]
},
}
]
标注区间
markArea
series: [
{
//标注区间
markArea: {
data: [
[
{
xAxis: '一月'
},
{
xAxis: '二月'
}
],
[
{
xAxis: '七月'
},
{
xAxis: '八月'
}
]
]
}
}
]
线条控制:平滑 风格
平滑
smooth
series: [
{
smooth: true,
}
]
风格
lineStyle
series: [
{
//线的样式
lineStyle: {
color: 'green',
type: 'solid' // dashed dotted solid
}
}
]
填充风格
areaStyle
series: [
{
//面积填充
areaStyle: {
color: 'green'
}
}
]
}
紧挨边缘
boundaryGap
xAxis: {
type: 'category',
data: xDataArr,
//紧挨边缘
boundaryGap: false
},
缩放:脱离0值比例
数据差距不大
scale
yAxis: {
type: 'value',
scale: true
},
堆叠
stack
series: [
{
name: '销量1',
type: 'line',
data: yDataArr1,
//堆叠
stack: 'all',
},
{
name: '销量2',
type: 'line',
data: yDataArr1,
//堆叠
stack: 'all',
}
]
散点图
图表类型:
在series下设置type:scatter
xAxis 和 yAxis的type都要设置为value
调整:
将坐标轴都设置为脱离0值比例,scale
yAxis: {
type: 'value',
scale: true
},
xAxis: {
type: 'value',
scale: true
},
气泡图效果
设置散点的大小不同
series: [
{
type: 'scatter',
data: [[10, 2],[11, 15]],
// symbolSize: 5
// 回调函数
symbolSize: function(arg){
console.log(arg)
return 5
}
}
]
散点的颜色不同
series: [
{
type: 'scatter',
data: [[10, 2],[11, 15]],
// itemStyle: {
color: 'green'
}
// 回调函数
itemStyle: {
color: function(arg){
console.log(arg)
return 'green'
}
}
}
]
涟漪动画
series: [
{
type: 'effectScatter',
// 涟漪动画触发时机
showEffectOn: 'emphasis', // render 渲染完生效, emphasis 移入划过生效
// 涟漪动画的大小和范围
rippleEffect: {
scale: 5, // 涟漪大小
brushType: 'stroke' // 设置涟漪为空心效果
}
data: [[10, 2],[11, 15]]
}
]
直角坐标系的常用配置
柱状图 折线图 散点图
网格 grid
grid是用来控制直角坐标系的布局和大小
var option = {
grid: {
show: true, // 显示网格
borderWidth: 10, // 设置边框大小
borderColor 'red', // 设置边框颜色
left: 120,
top: 120,
containLabel: true // 距离是包含坐标轴上的文字
}
}
坐标轴 axis
一个grid中最多有两种位置的x轴和y轴
坐标轴类型 type
value:数值轴,会自动从目标数据中读取数据
category:类目轴,该类型必须通过data设置类目数据
显示位置 position
xAxis: 可取值为 top或者bottom
yAxis: 可取值为 left 或者right
echarts隐藏坐标轴、刻度线、坐标值、网格 —— 全部隐藏
xAxis: {
show:false, // 不显示坐标轴线、坐标轴刻度线和坐标轴上的文字
axisTick:{
show:false // 不显示坐标轴刻度线
},
axisLine: {
show: false, // 不显示坐标轴线
},
axisLabel: {
show: false, // 不显示坐标轴上的文字
},
splitLine:{
show:false // 不显示网格线
},
},
区域缩放 dataZoom
dataZoom用于区域缩放,对数据范围过滤,x轴和y轴都可以拥有
dataZoom是一个数组,意味着可以配置多个区域缩放器
类型 type
slider: 滑块
inside: 内置,依靠鼠标滚轮或双指缩放
var option = {
dataZoom: [
{
type: 'slider' // slider, inside
},
]
}
指明产生作用的轴
xAxisIndex: 设置缩放组件控制的是那个x轴,一般写0即可
yAxisIndex: 设置缩放组件控制的是哪个y轴,一般写0即可
var option = {
dataZoom: [
{
type: 'slider' // slider, inside
xAxisIndex: 0
},
{
type: 'slider',
yAxisIndex: 0
}
]
}
指明初始状态的缩放情况
start: 数据窗口范围的起始百分比
end: 数据窗口范围的结束百分比
var option = {
dataZoom: [
{
type: 'slider' // slider, inside
xAxisIndex: 0
},
{
type: 'slider',
yAxisIndex: 0,
start: 0,
end: 50
}
]
}
饼图
在series下设置 type: pie
var option = {
series: [
{
type: 'pie',
data: [{name: '淘宝', value: 1123},{name: '京东', value: 2343}] // 数组包对象
}
]
}
饼图文字的显示
var option = {
series: [
{
type: 'pie',
data: [{name: '淘宝', value: 1123},{name: '京东', value: 2343}], // 数组包对象
label: { //饼图文字的显示
show: true, 显示文字
// formatter: 'hehe'
formatter: function(arg){
console.log(arg)
return arg.name
}
}
}
]
}
设置半径
var option = {
series: [
{
type: 'pie',
data: [{name: '淘宝', value: 1123},{name: '京东', value: 2343}], // 数组包对象
// radius: 20 // 饼图的半径
radius: '20%' // 百分比参照的是宽度和高度中较小的那一部分的一半进行百分比设置
}
]
}
圆环设置
var option = {
series: [
{
type: 'pie',
data: [{name: '淘宝', value: 1123},{name: '京东', value: 2343}], // 数组包对象
radius: ['50%', '75%'], // 圆环设置 第0个元素代表的是内圆半径 第1个元素外圆的半径
}
]
}
南丁格尔图
每个区域的半径都不同
var option = {
series: [
{
type: 'pie',
data: [{name: '淘宝', value: 1123},{name: '京东', value: 2343}], // 数组包对象
roseType: 'radius', // 南丁格尔图 饼图的每一个区域的半径是不同的
}
]
}
设置选中效果
var option = {
series: [
{
type: 'pie',
data: [{name: '淘宝', value: 1123},{name: '京东', value: 2343}], // 数组包对象
roseType: 'radius', // 南丁格尔图 饼图的每一个区域的半径是不同的
// selectedMode: 'single' // 选中的效果,能够将选中的区域偏离圆点一小段距离
selectedMode: 'multiple',
selectedOffset: 30 // 设置偏离距离
}
]
}
地图
var myCharts = echarts.init(document.querySelector('div'))
axios({
url: 'json/china.json'
}).then(result => {
console.log(result);
echarts.registerMap('chinaMap', result.data)
var option = {
geo: {
type: 'map',
map: 'chinaMap', // chinaMap需要和registerMap中的第一个参数保持一致
}
}
myCharts.setOption(option)
})
缩放拖动
var option = {
geo: {
type: 'map',
map: 'chinaMap', // chinaMap需要和registerMap中的第一个参数保持一致
roam: true // 设置缩放以及拖动效果
}
}
名称显示
var option = {
geo: {
type: 'map',
map: 'chinaMap', // chinaMap需要和registerMap中的第一个参数保持一致
label: {
show: true // 展示标签
}
}
初始化缩放比例
var option = {
geo: {
type: 'map',
map: 'chinaMap', // chinaMap需要和registerMap中的第一个参数保持一致
zoom: 1 // 设置初始化缩放比例 默认值为1
}
地图中心点
var option = {
geo: {
type: 'map',
map: 'chinaMap', // chinaMap需要和registerMap中的第一个参数保持一致
center: [87.617733, 43.792818]
}
不同的城市显示不同的颜色
1.城市的空气质量数据设置给series
2.将series下的数据和geo关联起来
4.结合visualMap配置使用
var option = {
geo: {
type: 'map',
map: 'chinaMap', // chinaMap需要和registerMap中的第一个参数保持一致
roam: true, // 设置缩放以及拖动 效果
label: {
show: true
}
},
series: [
{
data: airData,
geoIndex: 0, // 将空气质量的数据和第0个geo配置关联在一起
type: 'map'
}
],
visualMap: {
min: 0,
max: 300,
inRange: {
color: ['white', 'red'] // 控制颜色渐变的范围
},
calculable: true // 出现滑块
}
}
地图和散点图结合
series: [
{
data: airData,
geoIndex: 0, // 将空气质量的数据和第0个geo配置关联在一起
type: 'map'
},
{
data: scaleData, // 配置散点的坐标数据
type: 'effectScatter',
coordinateSystem: 'geo', // 指明散点使用的坐标系统 geo的坐标系统
rippleEffect: {
scale: 10 // 设置涟漪动画的比例
}
}
],
雷达图
var dataMax = [
{
name: '易用性',
max: 100
},
{
name: '功能',
max: 100
},
{
name: '拍照',
max: 100
},
{
name: '跑分',
max: 100
},
{
name: '续航',
max: 100
}
]
var option = {
radar: {
indicator: dataMax, // 配置各个维度的最大值
},
series: [
{
type: 'radar', // radar 此图表时一个雷达图
data: [
{
name: '华为手机1',
value: [80, 90, 80, 82, 90]
},
{
name: '中兴手机1',
value: [70, 82, 75, 70, 78]
}
]
}
]
}
mCharts.setOption(option)
显示数值
series: [
{
type: 'radar', // radar 此图表时一个雷达图
label: { // 设置标签的样式
show: true // 显示数值
},
data: [
{
name: '华为手机1',
value: [80, 90, 80, 82, 90]
},
{
name: '中兴手机1',
value: [70, 82, 75, 70, 78]
}
]
}
]
区域面积
series: [
{
type: 'radar', // radar 此图表时一个雷达图
areaStyle: {}, // 将每一个产品的雷达图形成阴影的面积
data: [
{
name: '华为手机1',
value: [80, 90, 80, 82, 90]
},
{
name: '中兴手机1',
value: [70, 82, 75, 70, 78]
}
]
}
]
绘制类型
var option = {
radar: {
indicator: dataMax, // 配置各个维度的最大值
shape: 'polygon' // 配置雷达图最外层的图形 circle polygon
}
}
仪表盘
var myCharts = echarts.init(document.querySelector('div'))
var option = {
series: [
{
type: 'gauge',
data: [
{
value: 97
} // 每一个对象代表一个指针
]
}
]
}
myCharts.setOption(option)
数值范围
max, min
series: [
{
type: 'gauge',
data: [
{
value: 97
} // 每一个对象代表一个指针
],
min: 50 // min max 控制仪表盘数值范围
}
]
多个指针差异
itemStyle
series: [
{
type: 'gauge',
data: [
{
value: 67,
itemStyle: { // 指针的样式
color: 'pink' // 指针的颜色
}
},
{
value: 97,
itemStyle: { // 指针的样式
color: 'red' // 指针的颜色
}
} // 每一个对象代表一个指针
],
min: 50 // min max 控制仪表盘数值范围
}
]
七个图表小结
bar 柱状图
line 折线图
scatter 散点图 / effectScatter 涟漪散点图
pie 饼图
map 地图
radar 雷达图
gauge 仪表图
主题
内置主题
eCharts中默认内置了两套主题: light dark
在初始化对象方法init中可以指明
var myChart = ehcarts.init(dom,'light')
自定义主题
1.在官网的主题编辑器中编辑主题
2.下载主题,是个js文件
3.引入主题js文件
4.在init方法中使用主题
var myChart = ehcarts.init(dom,'itcast')
调色盘
1.主题调色盘
2.全局调色盘
option: {
color: ['red', 'green', 'blue',],
}
3.局部调色盘
series:[{
type: 'bar',
color: ['red', 'green', 'blue',],
}]
颜色渐变
线性渐变
series: [
{
name: '语文',
type: 'bar',
data: [79, 92, 87],
itemStyle: {
color: {
type: 'linear', // 线性渐变
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0, color: 'red' // 0%处的颜色为红色
},
{
offset: 1, color: 'blue' // 100%处的颜色为蓝
}
]
}
}
}
]
径向渐变
series: [
{
name: '语文',
type: 'bar',
data: [79, 92, 87],
itemStyle: {
color: {
type: 'radial', // 径向渐变
x: 0.5,
y: 0.5,
r: 0.5,
colorStops: [
{
offset: 0, color: 'red' // 0%处的颜色为红色
},
{
offset: 1, color: 'blue' // 100%处的颜色为蓝
}
]
}
}
}
]
样式
直接样式
textStyle
var option = {
title: {
text: '图表',
textStyle: {
color: 'red'
}
}
}
itemStyle
series: [
{
name: '语文',
type: 'bar',
data: [79, 92, 87],
itemStyle: {
color: 'green'
}
}
]
lineStyle areaStyle label
高亮样式
series: [
{
name: '语文',
type: 'bar',
data: [79, 92, 87],
emphasis: {
itemStyle:{
color: 'blue'
}
}
}
]
图表自适应
// 监听window窗口大小变化的事件
window.onresize = function(){
// 调用echarts实例对象的resize方法
myCharts.resize()
}
window.addEventListener('resize',function(){})
// 第二种写法
window.onresize = myCharts.resize
加载动画
显示加载动画
myCharts.showLoading()
隐藏加载动画
myCharts.hideLoading()
动画的配置项
开启动画
animation: true
动画时长
animationDuration: 5000 // 以毫秒为单位
缓动动画 -- 缓动示例
animationEasing: 'bounceOut’
动画阀值
animationThreshold: 8
单种形式的元素数量大于这个阀值时会关闭动画
图表事件监听
在vue中
methods: {
// 初始化图表
initChart () {
this.chartsInstance = this.$echarts.init(this.$refs.seller_ref)
// 对图表对象进行鼠标事件的监听
this.chartsInstance.on('mouseover', () => {
clearInterval(this.timeId)
})
this.chartsInstance.on('mouseout', () => {
this.startInterval()
})
},
}