ECharts 是一个使用 JavaScript 实现的开源可视化库,它提供了一系列丰富的图表类型,包括地图图表。地图图表能够直观地展示地理数据,是数据可视化中非常实用的一种图表形式。本文将为你介绍如何使用 ECharts 轻松绘制地图图表,并提供20个实用案例全解析,帮助你快速掌握地图图表的制作技巧。
1. ECharts 地图图表基础
在开始绘制地图图表之前,我们需要了解一些基本概念:
- Geo 组件:ECharts 地图图表的核心组件,用于绘制地图。
- 数据格式:地图数据通常以 JSON 格式存储,包括地图的边界、行政区划等信息。
- 视觉映射:将数据值映射到地图上的颜色、形状等视觉元素。
2. 20个实用案例全解析
案例一:中国地图
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}]
};
myChart.setOption(option);
案例二:世界地图
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'world',
label: {
show: true
},
data: [
{name: 'China', value: Math.round(Math.random() * 1000)},
{name: 'USA', value: Math.round(Math.random() * 1000)},
// ... 其他国家数据
]
}]
};
myChart.setOption(option);
案例三:行政区划图
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'province',
label: {
show: true
},
data: [
{name: '北京市', value: Math.round(Math.random() * 1000)},
{name: '天津市', value: Math.round(Math.random() * 1000)},
// ... 其他市区数据
]
}]
};
myChart.setOption(option);
案例四:自定义地图
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'customMap',
label: {
show: true
},
data: [
{name: '区域1', value: Math.round(Math.random() * 1000)},
{name: '区域2', value: Math.round(Math.random() * 1000)},
// ... 其他区域数据
]
}]
};
myChart.setOption(option);
案例五:多层级地图
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京市', value: Math.round(Math.random() * 1000)},
{name: '上海市', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}, {
type: 'map',
map: 'province',
label: {
show: true
},
data: [
{name: '北京市', value: Math.round(Math.random() * 1000)},
{name: '上海市', value: Math.round(Math.random() * 1000)},
// ... 其他市区数据
]
}]
};
myChart.setOption(option);
案例六:地图动画
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}]
};
myChart.setOption(option);
// 动画效果
var animation = setInterval(function () {
var data = option.series[0].data;
data.forEach(function (item) {
item.value = Math.round(Math.random() * 1000);
});
myChart.setOption(option);
}, 1000);
案例七:地图标签
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true,
formatter: function (params) {
return params.name + ':' + params.value;
}
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}]
};
myChart.setOption(option);
案例八:地图颜色渐变
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
itemStyle: {
areaColor: '#3398DB'
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}]
};
myChart.setOption(option);
案例九:地图形状
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
itemStyle: {
borderColor: '#f0f0f0',
borderWidth: 1
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}]
};
myChart.setOption(option);
案例十:地图事件
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}]
};
myChart.setOption(option);
// 监听点击事件
myChart.on('click', function (params) {
console.log(params.name + ':' + params.value);
});
案例十一:地图缩放
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}]
};
myChart.setOption(option);
// 控制地图缩放
myChart.dispatchAction({
type: 'zoomIn'
});
myChart.dispatchAction({
type: 'zoomOut'
});
案例十二:地图标注
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}, {
type: 'effectScatter',
coordinateSystem: 'geo',
zlevel: 1,
rippleEffect: {
brushType: 'stroke'
},
label: {
normal: {
formatter: '{b}',
position: 'right',
show: true
}
},
symbolSize: 10,
data: [
{name: '北京', value: [116.46, 39.92]},
{name: '上海', value: [121.48, 31.22]},
// ... 其他城市数据
]
}]
};
myChart.setOption(option);
案例十三:地图热力图
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'heatmap',
coordinateSystem: 'geo',
data: [
{name: '北京', value: [116.46, 39.92, Math.round(Math.random() * 1000)]},
{name: '上海', value: [121.48, 31.22, Math.round(Math.random() * 1000)]},
// ... 其他城市数据
]
}]
};
myChart.setOption(option);
案例十四:地图路径
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'lines',
coordinateSystem: 'geo',
polyline: true,
data: [
{
coords: [
[116.46, 39.92],
[121.48, 31.22]
]
},
// ... 其他路径数据
]
}]
};
myChart.setOption(option);
案例十五:地图气泡
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}, {
type: 'scatter',
coordinateSystem: 'geo',
symbolSize: function (val) {
return val / 10;
},
data: [
{name: '北京', value: [116.46, 39.92]},
{name: '上海', value: [121.48, 31.22]},
// ... 其他城市数据
]
}]
};
myChart.setOption(option);
案例十六:地图组合
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}, {
type: 'lines',
coordinateSystem: 'geo',
polyline: true,
data: [
{
coords: [
[116.46, 39.92],
[121.48, 31.22]
]
},
// ... 其他路径数据
]
}]
};
myChart.setOption(option);
案例十七:地图缩略图
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}, {
type: 'custom',
coordinateSystem: 'geo',
renderItem: function (params, api) {
var coord = api.coord(params.data);
return {
type: 'image',
style: {
image: 'https://example.com/mini-map.png',
x: coord[0] - 10,
y: coord[1] - 10,
width: 20,
height: 20
}
};
},
data: [
{name: '北京', value: [116.46, 39.92]},
{name: '上海', value: [121.48, 31.22]},
// ... 其他城市数据
]
}]
};
myChart.setOption(option);
案例十八:地图时间轴
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}, {
type: 'timeLine',
coordinateSystem: 'geo',
data: [
{
time: '2021-01-01',
value: [116.46, 39.92]
},
{
time: '2021-02-01',
value: [121.48, 31.22]
},
// ... 其他时间数据
]
}]
};
myChart.setOption(option);
案例十九:地图动画路径
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}, {
type: 'lines',
coordinateSystem: 'geo',
polyline: true,
data: [
{
coords: [
[116.46, 39.92],
[121.48, 31.22]
],
lineStyle: {
width: 2,
opacity: 0.6,
curveness: 0.2
}
},
// ... 其他路径数据
]
}]
};
myChart.setOption(option);
案例二十:地图标签动画
var myChart = echarts.init(document.getElementById('main'));
var option = {
series: [{
type: 'map',
map: 'china',
label: {
show: true,
formatter: function (params) {
return params.name + ':' + params.value;
}
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
{name: '上海', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}]
};
myChart.setOption(option);
// 标签动画效果
var animation = setInterval(function () {
var data = option.series[0].data;
data.forEach(function (item) {
item.value = Math.round(Math.random() * 1000);
});
myChart.setOption(option);
}, 1000);
总结
通过以上20个实用案例,相信你已经对 ECharts 地图图表的制作有了更深入的了解。在实际应用中,你可以根据自己的需求进行修改和扩展,创造出更多具有创意的地图图表。希望这篇文章能帮助你轻松绘制出精美的地图图表!
