ECharts 是一款使用 JavaScript 实现的开源可视化库,它能够帮助开发者轻松地生成各种类型的图表,包括地图图表。对于新手来说,ECharts 地图图表的功能强大且易于上手。本文将为你介绍 30 个实用案例,让你轻松绘制炫酷的地图图表。
1. 中国地图基本绘制
首先,我们需要创建一个基本的地图图表。以下是一个简单的例子:
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 指定图表的配置项和数据
var option = {
title: {
text: '中国地图'
},
tooltip: {
trigger: 'item'
},
series: [
{
name: '中国',
type: 'map',
mapType: 'china',
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
2. 省份地图定制
你可以根据需要定制省份地图,比如设置不同省份的边框颜色和阴影:
{
name: '四川',
type: 'map',
mapType: '四川',
label: {
show: true,
color: '#fff'
},
itemStyle: {
areaColor: '#f1f1f1',
borderColor: '#dcdcdc',
shadowColor: 'rgba(0, 0, 0, 0.1)',
shadowBlur: 10
},
data: [
{name: '成都', value: Math.round(Math.random() * 1000)}
]
}
3. 地图交互效果
ECharts 地图支持丰富的交互效果,如点击事件、鼠标悬停等。以下是一个点击省份切换显示数据的例子:
myChart.on('click', function (params) {
if (params.componentType === 'series') {
var name = params.name;
var data = {
name: name,
value: Math.round(Math.random() * 1000)
};
var series = option.series[0];
var targetIndex = series.data.findIndex(function (item) {
return item.name === name;
});
if (targetIndex !== -1) {
series.data[targetIndex] = data;
} else {
series.data.push(data);
}
myChart.setOption(option);
}
});
4. 热力图效果
除了基本的地图绘制,ECharts 还支持绘制地图上的热力图效果。以下是一个热力图的例子:
{
name: '中国',
type: 'map',
mapType: 'china',
label: {
show: false
},
itemStyle: {
color: 'rgba(255, 215, 0, 0.5)'
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}
5. 地图动画效果
ECharts 地图支持丰富的动画效果,以下是一个地图动画效果的例子:
var option = {
title: {
text: '地图动画效果',
left: 'center'
},
tooltip: {
trigger: 'item'
},
visualMap: {
min: 0,
max: 1000,
left: 'left',
top: 'bottom',
text: ['高','低'], // 文本,默认为数值文本
calculable: true
},
series: [
{
name: '中国',
type: 'map',
mapType: 'china',
roam: true,
label: {
show: true
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}
]
};
6. 地图缩放与拖动
ECharts 地图支持缩放和拖动操作,以下是一个示例代码:
myChart.on('click', function (params) {
if (params.componentType === 'series') {
var name = params.name;
var series = option.series[0];
var targetIndex = series.data.findIndex(function (item) {
return item.name === name;
});
if (targetIndex !== -1) {
var center = series.data[targetIndex].center;
myChart.setOption({
series: [{
coordinateSystem: 'geo',
emphasis: {
label: {
show: true
}
},
data: [{
name: name,
value: [center[0], center[1]]
}]
}]
});
}
}
});
7. 地图数据聚合
ECharts 地图支持数据聚合功能,以下是一个数据聚合的例子:
{
name: '中国',
type: 'map',
mapType: 'china',
label: {
show: true
},
itemStyle: {
color: 'rgba(255, 215, 0, 0.5)'
},
data: [
{name: '北京', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
]
}
8. 地图与折线图结合
ECharts 地图可以与折线图结合,以下是一个结合的例子:
{
title: {
text: '地图与折线图结合'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['销量']
},
xAxis: {
type: 'category',
data: ['北京', '上海', '广东', '福建', '浙江']
},
yAxis: {
type: 'value'
},
series: [
{
name: '销量',
type: 'line',
data: [120, 200, 150, 80, 70]
}
]
}
9. 地图与散点图结合
ECharts 地图可以与散点图结合,以下是一个结合的例子:
{
title: {
text: '地图与散点图结合'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['销量']
},
xAxis: {
type: 'category',
data: ['北京', '上海', '广东', '福建', '浙江']
},
yAxis: {
type: 'value'
},
series: [
{
name: '销量',
type: 'scatter',
data: [
[120, 200],
[150, 80],
[80, 70],
[70, 80],
[120, 90]
]
}
]
}
10. 地图与柱状图结合
ECharts 地图可以与柱状图结合,以下是一个结合的例子:
{
title: {
text: '地图与柱状图结合'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['销量']
},
xAxis: {
type: 'category',
data: ['北京', '上海', '广东', '福建', '浙江']
},
yAxis: {
type: 'value'
},
series: [
{
name: '销量',
type: 'bar',
data: [
[120, 200],
[150, 80],
[80, 70],
[70, 80],
[120, 90]
]
}
]
}
11. 地图与饼图结合
ECharts 地图可以与饼图结合,以下是一个结合的例子:
{
title: {
text: '地图与饼图结合'
},
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left: 'left',
data: ['北京', '上海', '广东', '福建', '浙江']
},
series: [
{
name: '销量',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
data: [
{value: 335, name: '北京'},
{value: 310, name: '上海'},
{value: 234, name: '广东'},
{value: 135, name: '福建'},
{value: 1548, name: '浙江'}
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
}
12. 地图与雷达图结合
ECharts 地图可以与雷达图结合,以下是一个结合的例子:
{
title: {
text: '地图与雷达图结合'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['销量']
},
xAxis: {
type: 'category',
data: ['北京', '上海', '广东', '福建', '浙江']
},
yAxis: {
type: 'value'
},
series: [
{
name: '销量',
type: 'radar',
data: [
[
55, 66, 77, 88, 99
],
[
33, 44, 55, 66, 77
]
]
}
]
}
13. 地图与折线图结合(动画效果)
ECharts 地图可以与折线图结合,并添加动画效果。以下是一个结合动画效果的例子:
{
title: {
text: '地图与折线图结合(动画效果)'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['销量']
},
xAxis: {
type: 'category',
data: ['北京', '上海', '广东', '福建', '浙江']
},
yAxis: {
type: 'value'
},
series: [
{
name: '销量',
type: 'line',
data: [
[120, 200],
[150, 80],
[80, 70],
[70, 80],
[120, 90]
],
markPoint: {
data: [
{type: 'max', name: '最大值'},
{type: 'min', name: '最小值'}
]
},
markLine: {
data: [
{type: 'average', name: '平均值'}
]
}
}
]
}
14. 地图与散点图结合(动画效果)
ECharts 地图可以与散点图结合,并添加动画效果。以下是一个结合动画效果的例子:
{
title: {
text: '地图与散点图结合(动画效果)'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['销量']
},
xAxis: {
type: 'category',
data: ['北京', '上海', '广东', '福建', '浙江']
},
yAxis: {
type: 'value'
},
series: [
{
name: '销量',
type: 'scatter',
data: [
[120, 200],
[150, 80],
[80, 70],
[70, 80],
[120, 90]
],
markPoint: {
data: [
{type: 'max', name: '最大值'},
{type: 'min', name: '最小值'}
]
},
markLine: {
data: [
{type: 'average', name: '平均值'}
]
}
}
]
}
15. 地图与柱状图结合(动画效果)
ECharts 地图可以与柱状图结合,并添加动画效果。以下是一个结合动画效果的例子:
{
title: {
text: '地图与柱状图结合(动画效果)'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['销量']
},
xAxis: {
type: 'category',
data: ['北京', '上海', '广东', '福建', '浙江']
},
yAxis: {
type: 'value'
},
series: [
{
name: '销量',
type: 'bar',
data: [
[120, 200],
[150, 80],
[80, 70],
[70, 80],
[120, 90]
],
markPoint: {
data: [
{type: 'max', name: '最大值'},
{type: 'min', name: '最小值'}
]
},
markLine: {
data: [
{type: 'average', name: '平均值'}
]
}
}
]
}
16. 地图与饼图结合(动画效果)
ECharts 地图可以与饼图结合,并添加动画效果。以下是一个结合动画效果的例子:
{
title: {
text: '地图与饼图结合(动画效果)'
},
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left: 'left',
data: ['北京', '上海', '广东', '福建', '浙江']
},
series: [
{
name: '销量',
type: 'pie',
radius: '55%',
center: ['50%', '60%'],
data: [
{value: 335, name: '北京'},
{value: 310, name: '上海'},
{value: 234, name: '广东'},
{value: 135, name: '福建'},
{value: 1548, name: '浙江'}
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
}
17. 地图与雷达图结合(动画效果)
ECharts 地图可以与雷达图结合,并添加动画效果。以下是一个结合动画效果的例子:
{
title: {
text: '地图与雷达图结合(动画效果)'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['销量']
},
xAxis: {
type: 'category',
data: ['北京', '上海', '广东', '福建', '浙江']
},
yAxis: {
type: 'value'
},
series: [
{
name: '销量',
type: 'radar',
data: [
[
55, 66, 77, 88, 99
],
[
33, 44, 55, 66, 77
]
]
}
]
}
18. 地图与折线图结合(动态数据)
ECharts 地图可以与折线图结合,并动态更新数据。以下是一个动态更新数据的例子:
// 初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 动态更新数据
function updateData() {
var data = [
{name: '北京', value: Math.round(Math.random() * 1000)},
// ... 其他省份数据
];
myChart.setOption({
series: [{
data: data
}]
});
}
// 每隔1秒更新一次数据
setInterval(updateData, 1000);
19. 地图与散点图结合(动态数据)
ECharts 地图可以与散点图结合,并动态更新数据。以下是一个动态更新数据的例子:
// 初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 动态更新数据
function updateData() {
var data = [
[120, 200],
[150, 80],
[80, 70],
[70, 80],
[120, 90]
];
myChart.setOption({
series: [{
data: data
}]
});
}
// 每隔1秒更新一次数据
setInterval(updateData, 1000);
20. 地图与柱状图结合(动态数据)
ECharts 地图可以与柱状图结合,并动态更新数据。以下是一个动态更新数据的例子:
// 初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
// 动态更新数据
function updateData() {
var data = [
[120, 200],
[150, 80],
[80, 70],
[70, 80],
[120, 90]
];
myChart.setOption({
series: [{
data: data
}]
});
}
// 每隔1秒更新一次数据
setInterval(updateData, 1000);
21. 地图与饼图结合(动态数据)
ECharts 地图可以与饼图结合,并动态更新数据。以下是一个动态更新数据的例子:
”`javascript // 初始化echarts实例 var myChart = echarts.init(document.getElementById(‘main’));
// 动态更新数据 function updateData() {
var data = [
{value: Math.round(Math.random() * 1000), name: '北京'},
{value: Math.round(Math.random() * 1000), name: '上海'},
{value: Math.round(Math.random() * 1000), name: '广东'},
{value: Math.round(Math.random() * 1000), name: '福建'},
{value: Math.round(Math.random() * 1000), name: '浙江'}
];
myChart.setOption({
series: [{
data: data
}]
});
}
// 每隔1秒更新一次数据