Echarts学习笔记

461 阅读7分钟

官网:echarts.apache.org/zh/index.ht…

1.1 ECharts的基本使用

1.引入echarts
2.准备显示的div
3.初始化 echarts 实例对象
4.准备配置项
5.将配置项设置给 echarts 实例对象

实例:这里是基于vue2脚手架初始化的

npm install echarts //安装echarts

main.js

import * as echarts from 'echarts'; //第一步引入echarts
Vue.prototype.$echarts =echarts     //挂载到Vue实例对象上,这样所有组件通过this.$echarts使用

xxx.vue

<template>
  <div style="width:500px;height: 300px" ref="main"></div>  //第二步 准备显示的div
</template>
export default {
    mounted() {
      let myChart = this.$echarts.init(this.$refs.main) //第三步初始化echarts实例对象
      var option = {    //第四步准备配置项
          xAxis: {
              data: ["foo","bar","tom"]
          },
          yAxis: {},
          series: [{
              type: 'bar',
              data: [5, 10, 15]
          }]
      };
      myChart.setOption(option); // 第五步将配置项设置给 echarts 实例对象。
    }
​
}
</script>

2.1 option配置项

官方文档:echarts.apache.org/zh/option.h…

//具体要配置什么需要参考官方文档
xAxis: {    //直角坐标系 grid 中的 x 轴
    type: 'category',   //坐标轴类型
    data: ["foo","bar","tom"]   //类目数据
},
yAxis: {},  //直角坐标系 grid 中的 y 轴
series: [{
    type: 'bar',    //系列,控制显示什么形状
    data: [5, 10, 15]
}]

3.1 通用配置

3.1.1

//title:标题
var option = {
    title: {
        text: "我是辩题", // 标题文字
        textStyle: {
            color: 'red' // 文字颜色
        },
        borderWidth: 5, // 标题边框
        borderColor: 'green', // 标题边框颜色
        borderRadius: 5, // 标题边框圆角
        left: 20, // 标题的位置
        top: 20 // 标题的位置
    }
}

3.1.2 tooltip

//tooltip:提示框
tooltip:{
    trigger:'item',//触发类型,可选值有item\axis
    triggerOn:'click', //触发时机,可选值有 mouseOver\click
    // formatter:'{a}{b}' //格式化显示,可选值有 字符串模板\回调函数,具体参考文档
    formatter:function (arg) {
       return arg.name
    }
}

3.1.3 toolbox

//toolbox:工具按钮
toolbox: {
    feature: {
    saveAsImage: {}, // 将图表保存为图片
    dataView: {}, // 是否显示出原始数据
    restore: {}, // 还原图表
    dataZoom: {}, // 数据缩放
    magicType: { // 将图表在不同类型之间切换,图表的转换需要数据的支持
        type: ['bar', 'line']
        }
    }
}

3.1.4 legend

//legend:是图例,用于筛选类别,需要和 series 配合使用
legend:{
    data:['项目1','项目2']  //data里面的配置必须和series的name一致
},
series: [
    {
        name:'项目1',
        type: 'bar',
        data: [5, 10, 15]
    },
    {
        name:'项目2',
        type: 'bar',
        data: [3, 6, 9]
    }
]

4.1 Gird

直角坐标系:只针对柱状图,折线图,散点图有效

//1.控制坐标轴的大小,位置等
var option = {
    grid: {
        show: true, // 显示grid
        borderWidth: 10, // grid的边框宽度
        borderColor: 'red', // grid的边框颜色
        left: 100, // grid的位置
        top: 100,
        width: 300, // grid的大小
        height: 150
    }
}
//2.控制坐标轴的方向
//坐标轴类型 type
//value : 数值轴, 自动会从目标数据中读取数据
//category : 类目轴, 该类型必须通过 data 设置类目数据
var option = {
    xAxis: {
        type: 'category',
        data: xDataArr,
        position: 'top' //top或bottom
    },
    yAxis: {
        type: 'value',
        position: 'right'   //right或left
    }
}
// 3.区域缩放 dataZoom
var option = {
    dataZoom: [
        {
            type: 'slider',//slider : 滑块  inside:依靠鼠标滚轮或者双指缩放
            xAxisIndex: 0   //设置缩放组件控制的是哪个 x 轴, 一般写0即可
        },
        {
            type: 'slider',
            yAxisIndex: 0,//设置缩放组件控制的是哪个y轴, 一般写0即可
            start: 0,//数据窗口范围的起始百分比
            end: 80 //数据窗口范围的结束百分比
        }
    ]
}
​

5.1 基本图形

以下所以配置都是配置项的操作

5.1.1 柱状图

var option = {
    xAxis: {
        type: 'category',
        data: ["foo","bar","tom"]
    },
    yAxis: {},
    series: [{
        type: 'bar',
        data: [5, 10, 15]
    }]
};

常用效果:

series: [{
        type: 'bar',
        data: [5, 10, 15],
        markPoint:{		//1. 设置最大值和最小值
            data:[
                {type:'max',name:'最大值'},
                {type:'min',name:'最小值'},
            ]
        },
        markLine:{	//2. 设置平均值
            data:[
                {type:'average',name:'平均值'}
            ]
        },
    	label:{	//3. 设置是否显示数值以及样式
            show:true,
            position:'top'
        },
     	barWidth:'60%'	//4. 设置柱状图的宽度
    }]

5.1.2 折线图

let option = {
    xAxis: {
        type: 'category',
        data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月']
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            type: 'line',	//line代表折线图
            data: [3000, 2800, 900, 1000, 800, 700, 1400, 1300]
        }
    ]
}

常用效果:

//最大值和最小值:与柱状图设置一样
series: [
	 {
         markArea:{	//1.标注区间
            data:[
                    [
                        {xAxis: '1月'},
                        {xAxis: '2月'},
                    ],
                    [
                        {xAxis: '6月'},
                        {xAxis: '7月'},
                    ]
            ]
        },
         smooth: true,	//2.平滑线条
         lineStyle: {	//3.线条样式
            color: 'green',
            type: 'dashed' // 可选值还有 dotted solid
     	 },
    	 areaStyle: {	//4.填充风格
        	color: 'pink'
         }
     }
]
xAxis: {
    type: 'category',
    data: xDataArr,
    boundaryGap: false	//5.紧挨边缘  这是在xAxis中设置
}
yAxis: {
    type: 'value',
    scale: true	//6.缩放, 脱离0值比例(y轴不从零开始)  这是在yAxis中设置
}
var option = {
    series: [
        {
            type: 'line',
            data: yDataArr1,
            stack: 'all' //7.堆叠图 series中的每一个对象配置相同的stack值, 这个all可以任意写
        },
        {
            type: 'line',
            data: yDataArr2,
            stack: 'all' 
        }
    ]
}

5.1.3 散点图

let option = {
    xAxis: {
        type: 'value'
    },
    yAxis: {
        type: 'value'
    },
    series: [
        {
            type: 'scatter',
            data: [		//这是数据是二维数组
                [180,80],
                [170,70],
                [160,60],
            ]
        }
    ]
}

常见效果:

series: [
        {
            type: 'scatter',
            //type:effectScatter	3.涟漪动画效果
           /*rippleEffect:{			配置涟漪动画的大小
              scale:3	
            },
            showEffectOn: 'emphasis',*/	//配置涟漪动画显示时机	render 和 emphasis
            data: [		//这是数据是二维数组
                [180,80],
                [170,70],
                [160,60],
            ],
            symbolSize: 25,	//1. 控制散点的大小  可以接收回调函数来控制
            itemStyle: {	//2.控制散点的颜色	  可以接收回调函数来控制
              color: 'green',
            }
        }
    ]

5.1.4 饼图

//没有 xAxis 和 yAxis
let option = {
    series: [
        {
            type: 'pie',
            data:  [	//data里面是一个个对象
                {value: 11231,name: "foo"},
                {value: 22673,name: "bar"}
            ]
        }
    ]
}

常见效果:

series: [
        {
            type: 'pie',
            data:  [	
                {value: 11231,name: "foo"},
                {value: 22673,name: "bar"}
            ],
            label:{
              show:true,//1.显示文字
              formatter:function (args) {//格式化文字 与show一起使用
                return args.name+args.value
              }
            },
            roseType: 'radius',//2.南丁格尔图
            selectedMode: 'multiple', //3.选中效果  single和multiple
            selectedOffset: 30,//选中扇区的偏移距离
            radius: ['50%', '70%'],//4.圆环 数组的第一项是内半径,第二项是外半径
            //radius: 50,	//直接指定外半径值,也可以是百分比'30%'
        }
    ]

5.1.5 地图

百度地图API : 使用百度地图的 api , 它能够在线联网展示地图, 百度地图需要申请 ak

矢量地图 : 可以离线展示地图, 需要开发者准备矢量地图数据

//这里使用的是矢量地图
//第一步:在static/map文件夹下准备china.json文件
//第二步:通过JQuery获取json文件的数据
//第三步:调用registerMap方法 ,往echarts全局对象注册地图的 json 数据
//第四步:需要配置 geo 节点并使用

let _this=this	//这里的this需要指定组件的实例对象,因为echarts在vue的原型上
    $.get('static/map/china.json', function (chinaJson) {      
        _this.$echarts.registerMap('chinaMap', chinaJson)
})
let option = {
    geo: {
        type: 'map',// map是一个固定的值
        map: 'chinaMap',//chinaMap需要和registerMap中的第一个参数保持一致
    }
}

基本配置:

let option = {
    geo: {
        type: 'map',
        map: 'chinaMap',
        roam: true, // 1.鼠标进行拖动和缩放
        label:{
            show:true//2.显示名称
        },
        zoom:3,//3.缩放比例,默认是1
        center: [87.617733, 43.792818] // 4.当前视角的中心点,用经纬度表示
    }
}

常见效果:

//显示某个区域
$.get('static/map/anhui.json', function (anhuiJson) {	//在static/map文件夹下准备anhui.json文件
})
//不同城市显示不同颜色
//1.配置series下的data  ,其中name必须和static/map/anhui.json的name对应
//2.配置geoIndex和type
//3.结合 visualMap 配合使用
let airData = [
        { name: '北京', value: 39.92 },{ name: '天津', value: 39.13 },
        { name: '上海', value: 31.22 },{ name: '重庆', value: 66 },
        { name: '河北', value: 147 },{ name: '河南', value: 113 },
        { name: '云南',value: 25.04 },{ name: '辽宁', value: 50 },
        { name: '黑龙江', value: 114 },{ name: '湖南', value: 175 },
        { name: '安徽', value: 117 },{ name: '山东', value: 92 },
        { name: '新疆', value: 84 },{ name: '江苏', value: 67 },
        { name: '浙江', value: 84 },{ name: '江西', value: 96 },
        { name: '湖北',value: 273 },{ name: '广西', value: 59 },
        { name: '甘肃', value: 99 },{ name: '山西', value: 39 },
        { name: '内蒙古', value: 58 },{ name: '陕西',value: 61 },
        { name: '吉林', value: 51 },{ name: '福建', value: 29 },
        { name: '贵州', value: 71 },{ name: '广东', value: 38 },
        { name: '青海',value: 57 },{ name: '西藏', value: 24 },
        { name: '四川', value: 58 },{ name: '宁夏', value: 52 },
        { name: '海南', value: 54 },{ name: '台湾', value: 88 },
        { name: '香港', value: 66 },{ name: '澳门', value: 77 },
        { name: '南海诸岛', value: 55 }
      ]
let option = {
    geo: {
        type: 'map',
        map: 'chinaMap', 
        label:{
            show:true
        },
    },
    series: [
        {
            data: airData,
            geoIndex: 0,	//和geo关联起来,他的索引值代表第几个geo
            type: 'map',	//设置地图形式
        },

    ],
    visualMap: {
        min: 0, // 最小值
        max: 300, // 最大值
        inRange: {
            color: ['white', 'red'] // 颜色的范围
        },
        calculable: true // 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)
    }
}
//地图和散点图结合
//1.配置data
//2.配置type: 'effectScatter',
//3.让散点图使用地图坐标系统  coordinateSystem: 'geo',
//4.让涟漪的效果更加明显	rippleEffect
var option = {
    series: [
        {
            data: [
              {
                value: [117.283042, 31.86119] // 散点的坐标, 使用的是经纬度
              }
            ],
            type: 'effectScatter',
            coordinateSystem: 'geo',
            rippleEffect: {
            	scale: 10
            }
        }
    ]
}

5.1.6 雷达图

 let dataMax = [
     {
         name: '易用性', max: 100
     },
     {
         name: '功能', max: 100
     },
     {
         name: '拍照', max: 100
     },
     {
         name: '跑分', max: 100
     },
     {
         name: '续航', max: 100
     }
 ]
 let option = {
      radar: {
          indicator: dataMax	//1.设置最大值和名称
      },
      series: [
          {
              type: 'radar',	//2.设置type类型
              data: [			//3. 设置比较的数据
                  {
                      name: '华为',
                      value: [80, 90, 80, 82, 90]
                  },
                  {
                      name: '苹果',
                      value:  [70, 82, 75, 70, 78]
                  }
              ]
          }
      ]
  }

常见效果:

let option = {
      radar: {
          indicator: dataMax,
          shape: 'circle'	//3.最外层形状 	'polygon' ==> 多边形  'circle'==>圆形
      },
      series: [
          {
              type: 'radar',
              label:{
                  show:true		//1.显示数值
              },
              areaStyle: {},	//2.区域面积
              data: []
          }
      ]
  }

5.1.7 仪表盘

let option = {
    series: [
        {
            type: 'gauge',	//设置类型为gauge
            data: [
                {
                    value: 97,	//代表指针的数值
                }
            ]
        }
    ]
}

常见效果:

series: [
    {
        type: 'gauge',
        data: [
            {
                value: 97,
                itemStyle:{
                    color:'red'	//2.配置指针的颜色
                }
            },
            {		//3.配置多个对象,每个对象代表一个指针
                value: 77,
            }
        ],
        min:50,	//1.配置最大值和最小值
        max:120
    }
]

6.1 高级配置

6.1.1 显示相关

6.1.1.1 主题

内置主题

//第二个参数控制主题颜色   可选值:'light'、'dark'
let myChart = this.$echarts.init(this.$refs.main,'dark')

自定义主题

//网址:https://echarts.apache.org/zh/theme-builder.html
1.配置好想要的主题	purple:主题名
2.下载js文件到项目中	purple.js
3.引入js文件	import '../../static/theme/purple'
4.注册使用		let myChart = this.$echarts.init(this.$refs.main,'purple')

6.1.1.2 调色盘

主题调色盘

//在下载的js文件中配置
echarts.registerTheme('itcast', {
    "color": [
        "#893448",
        "#d95850",
        "#eb8146",
        "#ffb248",
        "#f2d643",
        "#ebdba4"
    ],
})

全局调色盘

//在option中配置
var option = {
	color: ["#893448", "#d95850", "#eb8146", "#ffb248","#f2d643","#ebdba4"]
}

局部调色盘

//在 series配置
series: [
    {
    	color: ["#893448", "#d95850", "#eb8146", "#ffb248","#f2d643","#ebdba4"]
    }
]

6.1.1.3 渐变颜色的实现

线性渐变

//x, y, x2, y2 范围从 0 - 1  以(x,x2),(y,y2)为原点,在那个轴就代表是那个方向
itemStyle: {
    color: {
        type: 'linear',
        x: 0,
        y: 0,
        x2: 0,
        y2: 1,
        colorStops: [
            { offset: 0, color: 'red'},  // 0% 处的颜色
            { offset: 1, color: 'blue'} // 100% 处的颜色
        ],
        globalCoord: false // 缺省为 false
    }
}

径向渐变

//x , y , r分别是圆心 x , y 和半径,取值0-1
series: [
    {
        itemStyle: {
        color: {
            type: 'radial',
            x: 0.5,
            y: 0.5,
            r: 0.5,
            colorStops: [
                {offset: 0, color: 'red' }, // 0% 处的颜色 
                { offset: 1, color: 'blue'}// 100% 处的颜色
            ],
            global: false // 缺省为 false
            }
        }
    }
]

6.1.1.4 样式

直接样式

//itemStyle,textStyle,lineStyle,lineStyle,label
data: [
    {
        value: 11231,
        name: "淘宝",
        itemStyle: {	//直接样式
        	color: 'black'
        }
    }
]

高亮样式

data: [
    {
        value: 11231,
        name: "淘宝",
        itemStyle: {	//直接样式
        	color: 'black'
        },
        emphasis: {	//高亮样式,就是包裹一层emphasis
            itemStyle: {
            	color: 'blue'
            },
        }
    }
]

6.1.1.5 响应式

//通过监听浏览器窗口的onresize方法,调用echarts的resize来实现响应式
let myChart = this.$echarts.init(this.$refs.main,'purple')
//方式一
 window.onresize=()=>{
     myChart.resize()
 }
//方式二:
window.onresize = myChart.resize

6.1.2 动画相关

6.1.2.1 加载动画

//mCharts.showLoading()		显示加载动画
//mCharts.hideLoading()		隐藏加载动画
使用场景:
发送请求前:mCharts.showLoading()	
发送请求成功的回调:mCharts.hideLoading()

6.1.2.2 增量动画

//所有数据的更新都通过 setOption 实现
需要重新设置option和配置mCharts.setOption(option),但是原来option有的不需要重写,会自动整合,而不是覆盖。

6.1.2.3 动画的配置

animation: true	//开启动画,默认开启
animationDuration: 5000	//动画时长
animationEasing : 'bounceOut'//缓动动画	可选值:linear bounceOut
animationThreshold: 8//动画阈值	单种形式的元素数量大于这个阈值时会关闭动画
let option = {
    animation: true,
    animationDuration: 5000,
    animationEasing : 'bounceOut',
    animationThreshold: 7,
}

6.1.3 常用API

全局echartsAPI

1.echarts.init	//创建实例对象,第一个参数是dom对象,第二个参数是主题
2.echarts.registerTheme	//注册自定义主题,在下载的js中注册,只有注册后才能使用
3.echarts.registerMap	//echarts.connect
4.echarts.connect	//实现多图关联,传入联动目标为 EChart 实例,支持数组
	以实现多图关联,传入联动目标为 EChart 实例,支持数组
    let mCharts1 = echarts.init(document.querySelector("div1"))
	let mCharts2 = echarts.init(document.querySelector("div2"))
    echarts.connect([mCharts1, mCharts2])

实例对象API

1.myEcharts.setOption()	//设置或修改图表实例的配置项以及数据
2.myEcharts.resize()	//重新计算和绘制图表,搭配window.onresize使用,做响应式
3.myEcharts.on()	'click''dblclick''mousedown''mousemove''mouseup' //绑定事件
	myEcharts.on('click', function (arg) {
    	console.log(arg)
    })
4.myEcharts.off()	'click''dblclick''mousedown''mousemove''mouseup' //解绑事件
	
5.myEcharts.dispatchAction()	//主动触发某些行为, 使用代码模拟用户的行为
    mCharts.dispatchAction({
        type: "highlight",// 触发高亮的行为
        seriesIndex: 0,//触发的图表
        dataIndex: 1	//图表上的具体某个数据
    })
6.myEcharts.clear()	//清除所有的实例图表,但是通过myEcharts.setOption()还可以显示	
7.myEcharts.dispose()//销毁所有的实例图表,不可以还原了

如果觉得有帮助欢迎点赞、评论。 上述内容仅仅代表个人观点,如有错误,请指正。如果你也对前端感兴趣,欢迎访问我的个人博客sundestiny.github.io/myblog/