經過一個簡單的案例但願可以幫助像我同樣剛接觸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' }, } 複製代碼經過geo地理座標系組件繪製地圖。這裏能夠類比折現圖,柱狀圖,畫這些圖須要一個載體就是直角座標系,那在地圖上展現數據的話geo就是這個長成地圖模樣的座標系。因此要展現數據,先畫載體座標系。
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)' // 邊框顏色 } }, } 複製代碼接下來就能夠在地圖上進行標註,圖表都是根據數據來繪製。直角座標系中繪製圖表須要x軸和y軸的值,在地圖上就是經緯度了。
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的空對象提示框已經生效了,可是顯然數據顯示的有問題,默認顯示的是value中的第二項(緯度),不是咱們真正須要的顯示的第三項污染程度,同時提示框中還想添加一個自定義的跳轉連接。 (這裏有個小坑是,在echarts官網的兩個相似的地圖示例中,標註點的數據顯示也爲緯度而不是真正要顯示的數據)
能夠經過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> 複製代碼