ECharts 是一个使用 JavaScript 实现的开源可视化库,它提供了一种简单而强大的方式来创建交互式的图表。其中,ECharts 地图功能尤为强大,可以帮助开发者轻松绘制出个性化的地图。本文将带你从基础到进阶,解析如何使用 ECharts 绘制地图。
基础入门
1. 引入 ECharts 和地图数据
首先,需要在你的项目中引入 ECharts 和对应的地图数据。以下是一个简单的示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ECharts 地图示例</title>
<!-- 引入 ECharts 文件 -->
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.3.2/echarts.min.js"></script>
<!-- 引入中国地图数据 -->
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.3.2/map/js/china.js"></script>
</head>
<body>
<!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
title: {
text: '中国地图示例'
},
tooltip: {},
legend: {
orient: 'vertical',
left: 'left',
data:['销量']
},
series: [
{
name: '销量',
type: 'map',
mapType: 'china',
roam: true,
label: {
show: true
},
data:[
{name: '广东',value: 95},
{name: '广西',value: 90},
{name: '海南',value: 80}
]
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>
</body>
</html>
在上面的代码中,我们引入了 ECharts 和中国地图数据。然后,我们创建了一个 ECharts 实例,并设置了一个包含标题、提示框、图例和系列配置的 option 对象。
2. 设置地图样式
ECharts 提供了丰富的地图样式配置,包括地图的边框、文本、阴影等。以下是一个示例:
series: [
{
name: '销量',
type: 'map',
mapType: 'china',
label: {
show: true,
color: '#fff',
fontSize: 14,
borderWidth: 1,
borderColor: '#fff',
shadowBlur: 10,
shadowColor: '#333'
},
itemStyle: {
areaColor: '#2c343c',
borderColor: '#111'
},
emphasis: {
label: {
color: '#fff'
},
itemStyle: {
areaColor: '#2c343c',
borderColor: '#111'
}
},
data:[
{name: '广东',value: 95},
{name: '广西',value: 90},
{name: '海南',value: 80}
]
}
]
在上面的代码中,我们设置了地图文本的颜色、字体大小、边框、阴影等样式,以及地图区域的颜色和边框颜色。此外,我们还为鼠标悬停效果设置了样式。
3. 地图交互
ECharts 地图支持丰富的交互功能,例如缩放、平移、点击事件等。以下是一个示例:
// 监听点击事件
myChart.on('click', function (params) {
if (params.componentType === 'series') {
alert(params.name + ' 的销量为:' + params.value);
}
});
在上面的代码中,我们监听了地图的点击事件,并在点击地图区域时显示相应的销量信息。
进阶技巧
1. 自定义地图
ECharts 支持自定义地图,你可以使用地图JSON数据来创建一个自定义地图。以下是一个示例:
var option = {
series: [
{
name: '销量',
type: 'map',
mapType: 'custom',
// 自定义地图数据
data: [
{name: '北京',value: 95},
{name: '上海',value: 90},
{name: '广州',value: 80}
],
// 自定义地图JSON数据
map: {
type: 'custom',
getFeatureByType: function (feature, layer) {
return feature.properties && feature.properties.name;
},
// 自定义地图数据
features: [
{
"type": "Feature",
"properties": {
"name": "北京"
},
"geometry": {
"type": "Polygon",
"coordinates": [[[116.46, 39.92], [116.46, 40.02], [116.52, 40.02], [116.52, 39.92], [116.46, 39.92]]]
},
{
"type": "Feature",
"properties": {
"name": "上海"
},
"geometry": {
"type": "Polygon",
"coordinates": [[[121.47, 31.23], [121.47, 31.33], [121.53, 31.33], [121.53, 31.23], [121.47, 31.23]]]
},
{
"type": "Feature",
"properties": {
"name": "广州"
},
"geometry": {
"type": "Polygon",
"coordinates": [[[113.23, 23.13], [113.23, 23.23], [113.33, 23.23], [113.33, 23.13], [113.23, 23.13]]]
}
]
}
}
]
};
在上面的代码中,我们使用地图JSON数据创建了一个自定义地图。你可以根据需要修改地图数据和形状。
2. 地图联动
ECharts 支持地图联动,即多个地图实例之间可以相互影响。以下是一个示例:
var myChart1 = echarts.init(document.getElementById('main1'));
var myChart2 = echarts.init(document.getElementById('main2'));
var option1 = {
series: [
{
name: '销量',
type: 'map',
mapType: 'china',
roam: true,
data: [
{name: '北京',value: 95},
{name: '上海',value: 90},
{name: '广州',value: 80}
]
}
]
};
var option2 = {
series: [
{
name: '销量',
type: 'map',
mapType: 'china',
roam: true,
data: [
{name: '北京',value: 95},
{name: '上海',value: 90},
{name: '广州',value: 80}
]
}
]
};
myChart1.setOption(option1);
myChart2.setOption(option2);
// 监听第一个地图的点击事件
myChart1.on('click', function (params) {
myChart2.setOption({
series: [{
data: [
{name: '北京',value: 95},
{name: '上海',value: 90},
{name: '广州',value: 80}
]
}]
});
});
在上面的代码中,我们创建了两个地图实例,并通过点击事件实现了地图联动。
3. 地图缩放
ECharts 地图支持缩放功能,你可以通过设置 roam 属性来实现。以下是一个示例:
series: [
{
name: '销量',
type: 'map',
mapType: 'china',
roam: true,
data: [
{name: '北京',value: 95},
{name: '上海',value: 90},
{name: '广州',value: 80}
]
}
]
在上面的代码中,我们将 roam 属性设置为 true,这样地图就支持缩放功能了。
通过以上内容,相信你已经对 ECharts 地图有了初步的了解。在实际开发中,你可以根据自己的需求进行调整和优化,绘制出更加个性化的地图。祝你学习愉快!
