经过一个简单的案例但愿可以帮助像我同样刚接触echarts地图开发面对文档众多配置项不知道从哪下手的同窗。html
案例包括使用charts地理坐标系组件(geo)绘制地图,经过带有涟漪特效动画的散点图(effectScatter)进行标注,进行简单的样式修改,而且实现根据数据的值显示不一样的颜色,鼠标移动触发提示框,自定义提示框,点击跳转等常见需求。git
下载echarts:github地址
复制dist目录下的 echarts.min.js 文件github
新建html,引入 echarts.min.jsapache
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>地图标注</title> </head> <body> <script src="./echarts.min.js"></script> </body> </html> 复制代码
若是是绘制通常的柱状图,折线图,只要引入echarts就够了,绘制地图还须要引入一个地图文件。数组
到/map/js/ 目录下复制 china.js 并引入,能够看到这个目录下还有世界地图,各省地图的js,须要画哪一个地图从这里引入相应js就好,案例使用中国地图。bash
准备一个绘制图表的 具备宽高的 容器dommarkdown
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>地图标注</title> </head> <body> <div id="china" style="width: 900px; height: 600px"> </div> <script src="./echarts.min.js"></script> <script src="./china.js"></script> </body> </html> 复制代码
获取dom,将dom传入echarts的init方法初始化echarts实例。echarts
<script> var china = document.getElementById('china'); var chinaMap = echarts.init(china); </script> 复制代码
建立一个配置项,将配置项经过实例的setOption方法传入绘制图表。dom
<script> var china = document.getElementById('china'); var chinaMap = echarts.init(china); var option = { } chinaMap.setOption(option); </script> 复制代码
这时候已经能够绘制图表了,固然配置项仍是个空对象,因此页面上也不会显示任何内容,下面只要添加须要的配置项就好了。
配置标题并居中,这里遇到一个小坑一开始查看文档我觉得居中是textAlign这个属性,试了之后才知道是left控制函数
var option = { title: { text: '中国空气质量', left: 'center' }, } 复制代码
var option = { title: { text: '中国空气质量', left: 'center' }, geo: { map: 'china', // 地图选择china,对应引入的china.js }, } 复制代码
此时地图已经出现,而且带有一些默认的效果
var option = { title: { text: '中国空气质量', left: 'center' }, geo: { map: 'china', silent: true, // 禁止图形响应鼠标事件 itemStyle: { color: '#004981', // 背景颜色 borderColor: 'rgb(54,192,118)' // 边框颜色 } }, } 复制代码
var option = { title: { text: '中国空气质量', left: 'center' }, geo: { map: 'china', silent: true, itemStyle: { color: '#004981', borderColor: 'rgb(54,192,118)' } }, series: [ { type: 'effectScatter', // 指明图表类型:带涟漪效果的散点图 coordinateSystem: 'geo', // 指明绘制在geo坐标系上 } ] } 复制代码
图表的核心固然是要展现的数据,数据配置在series每一项的data属性中、在地图上,默认value的前两项为经纬度,第三项为其余数据,数据能够写成一个简单的数组形式,也能够是一个对象。
// 这种形式的data默认每一项经纬度
data: [
[12,32],
[43,23],
[123,43]
]
复制代码
咱们这里除了经纬度还须要城市的名称和城市污染度状况,因此能够写成对象的形式,随便从网上找了三个城市的坐标。
图表会默认读取value的前两项做为经纬度坐标,因此能够看到小点已经出如今地图上。
var option = { title: { text: '中国空气质量', left: 'center' }, geo: { map: 'china', silent: true, itemStyle: { color: '#004981', borderColor: 'rgb(54,192,118)' } }, series: [ { type: 'effectScatter', coordinateSystem: 'geo', data: [ { name: '上海', value: [121.47,31.23, 55] }, { name: '北京', value: [116.40,39.90, 110] }, { name: '重庆', value: [106.55,29.56, 32] // value的前两项是经纬度坐标,第三项为污染度数据 } ] } ] } 复制代码
添加提示框组件,实现鼠标移到标注点上时显示数据详情,经过tooltip配置项配置。
var option = { title: { text: '中国空气质量', left: 'center' }, tooltip: {}, // 配置提示框 geo: { map: 'china', silent: true, itemStyle: { color: '#004981', borderColor: 'rgb(54,192,118)' } }, series: [ { type: 'effectScatter', coordinateSystem: 'geo', data: [ { name: '上海', value: [121.47,31.23, 55] }, { name: '北京', value: [116.40,39.90, 110] }, { name: '重庆', value: [106.55,29.56, 32] } ] } ] } 复制代码
能够经过tooltip下的formatter来自定义提示框的内容,当formatter为函数时能够接收一个参数,从参数中能够拿到当前坐标点的信息
var option = { title: { text: '中国空气质量', left: 'center' }, // 自定义提示框内容 tooltip: { formatter: function(params) { var value = params.value; var a = '<br> <a href="http://www.baidu.com" style="color: red">查看详情</a>' return params.name + ': ' + value[2] + a; } }, geo: { map: 'china', silent: true, itemStyle: { color: '#004981', borderColor: 'rgb(54,192,118)' } }, series: [ { type: 'effectScatter', coordinateSystem: 'geo', data: [ { name: '上海', value: [121.47,31.23, 55] }, { name: '北京', value: [116.40,39.90, 110] }, { name: '重庆', value: [106.55,29.56, 32] } ] } ] } 复制代码
此时提示框中就变成咱们自定义的内容,不过尝试点击按钮会发现根本点不到,因此还须要给tooltip添加两项配置
var option = { title: { text: '中国空气质量', left: 'center' }, tooltip: { alwaysShowContent: true, // 提示框老是显示(再也不是鼠标离开就消失) enterable: true, // 容许提示框被点击 formatter: function(params) { var value = params.value; var a = '<br> <a href="http://www.baidu.com" style="color: red">查看详情</a>' return params.name + ': ' + value[2] + a; } }, geo: { map: 'china', silent: true, itemStyle: { color: '#004981', borderColor: 'rgb(54,192,118)' } }, series: [ { type: 'effectScatter', coordinateSystem: 'geo', data: [ { name: '上海', value: [121.47,31.23, 55] }, { name: '北京', value: [116.40,39.90, 110] }, { name: '重庆', value: [106.55,29.56, 32] } ] } ] } 复制代码
此时数据显示正确,点击跳转功能也实现了,还差根据污染程度不一样显示不一样颜色的标注点,因此要再回到series对数据的配置项下。
itemStyle 能够配置每一个数据的显示样式,color表明点的颜色,他相似上面提示框的formatter也能够写成一个函数,拿到每一个数据的内容,只要根据不一样的值返回不一样的颜色值就能够了。
var option = { title: { text: '中国空气质量', left: 'center' }, tooltip: { alwaysShowContent: true, enterable: true, formatter: function(params) { var value = params.value; var a = '<br> <a href="http://www.baidu.com" style="color: red">查看详情</a>' return params.name + ': ' + value[2] + a; } }, geo: { map: 'china', silent: true, itemStyle: { color: '#004981', borderColor: 'rgb(54,192,118)' } }, series: [ { type: 'effectScatter', coordinateSystem: 'geo', itemStyle: { // 配置每一个数据点的样式 color: function(params) { var color = ''; var value = params.value; if(value[2] < 50) { color = 'green' } if(value[2] >= 50 && value[2] < 100) { color = 'yellow' } if(value[2] >= 100) { color = 'red' } return color; } }, data: [ { name: '上海', value: [121.47,31.23, 55] }, { name: '北京', value: [116.40,39.90, 110] }, { name: '重庆', value: [106.55,29.56, 32] } ] } ] } 复制代码
搞定,我也是刚使用echarts不久,若是有什么错误还望指出,最后附上完整代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>地图标注</title> </head> <body> <div id="china" style="width: 900px; height: 600px"> </div> <script src="./echarts.min.js"></script> <script src="./china.js"></script> <script> var china = document.getElementById('china'); var chinaMap = echarts.init(china); var option = { title: { text: '中国空气质量', left: 'center' }, tooltip: { alwaysShowContent: true, enterable: true, formatter: function (params) { var value = params.value; var a = '<br> <a href="http://www.baidu.com" style="color: red">查看详情</a>' return params.name + ': ' + value[2] + a; } }, geo: { map: 'china', silent: true, itemStyle: { color: '#004981', borderColor: 'rgb(54,192,118)' } }, series: [{ type: 'effectScatter', coordinateSystem: 'geo', itemStyle: { color: function (params) { var color = ''; var value = params.value; if (value[2] < 50) { color = 'green' } if (value[2] >= 50 && value[2] < 100) { color = 'yellow' } if (value[2] >= 100) { color = 'red' } return color; } }, data: [{ name: '上海', value: [121.47, 31.23, 55] }, { name: '北京', value: [116.40, 39.90, 110] }, { name: '重庆', value: [106.55, 29.56, 32] } ] }] } chinaMap.setOption(option); </script> </body> </html> 复制代码