新手必学:轻松掌握ECharts地图图表,30个实用案例教学,快速上手!

2026-11-11 0 阅读

在数据可视化的领域中,地图图表以其直观性和互动性脱颖而出,成为展示地理分布数据的重要工具。ECharts作为国内最流行的JavaScript图表库之一,提供了丰富的地图图表功能。对于新手来说,掌握ECharts地图图表不仅能够提升数据处理和展示能力,还能在数据可视化项目中大显身手。本文将带您通过30个实用案例,轻松上手ECharts地图图表的制作。

案例一:中国地图展示

1.1 准备工作

首先,您需要在项目中引入ECharts和相应的地图数据。

<!-- 引入ECharts主模块和地图数据 -->
<script src="https://cdn.jsdelivr.net/npm/echarts@5.0.0/dist/echarts.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.0.0/map/js/china.js"></script>

1.2 创建图表

在HTML中添加一个用于渲染图表的容器,并初始化ECharts实例。

var myChart = echarts.init(document.getElementById('main'));

1.3 配置图表

配置图表的选项,包括标题、地图类型、数据等。

var option = {
    title: {
        text: '中国地图展示'
    },
    tooltip: {},
    visualMap: {
        min: 0,
        max: 100,
        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)},
                // 其他城市数据...
            ]
        }
    ]
};

myChart.setOption(option);

1.4 效果预览

运行上述代码,您将看到一个带有北京及其他城市数据的动态中国地图。

案例二:全球地图展示

全球地图的创建与国内地图类似,但需要引入不同的地图数据。

// 引入全球地图数据
<script src="https://cdn.jsdelivr.net/npm/echarts@5.0.0/map/js/world.js"></script>

在配置图表时,将mapType设置为'world',并根据需要修改其他配置。

案例三:省份地图展示

对于特定的省份或地区,可以创建自定义的省份地图。

// 引入省份地图数据
<script src="https://cdn.jsdelivr.net/npm/echarts@5.0.0/map/js/province/your-province.js"></script>

配置图表时,将mapType设置为具体的省份名称。

案例四:动态数据更新

为了使地图图表更加生动,可以定时更新数据。

setInterval(function () {
    var data = [];
    for (var i = 0; i < 10; i++) {
        data.push({
            name: ['北京', '天津', '上海', '重庆', '河北', '山西', '辽宁', '吉林', '黑龙江',
                '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', '湖南', '广东',
                '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古',
                '广西', '西藏', '宁夏', '新疆', '香港', '澳门'].sort(function() {
                    return 0.5 - Math.random();
                })[0],
            value: Math.round(Math.random() * 1000)
        });
    }
    myChart.setOption({
        series: [{
            data: data
        }]
    });
}, 1000);

案例五:交互式地图

通过ECharts提供的交互功能,可以让用户与地图进行互动。

myChart.on('click', function (params) {
    if (params.componentType === 'series') {
        alert(params.name + ': ' + params.value);
    }
});

案例六:自定义样式

ECharts允许您自定义地图的样式,包括颜色、边框等。

series: [
    {
        name: '省份地图',
        type: 'map',
        mapType: 'province-name',
        itemStyle: {
            normal: {
                borderColor: '#f0f0f0',
                areaColor: '#f5f5f5'
            },
            emphasis: {
                areaColor: '#e1e1e1'
            }
        },
        label: {
            show: true,
            formatter: '{b}'
        },
        // 其他配置...
    }
]

案例七:多地图组合

在同一个图表中展示多个地图,可以形成更丰富的视觉效果。

var option = {
    series: [
        {
            type: 'map',
            mapType: 'china',
            // 其他配置...
        },
        {
            type: 'map',
            mapType: 'world',
            // 其他配置...
        }
    ]
};

案例八:地理坐标系

使用地理坐标系展示地图上的点。

series: [
    {
        type: 'effectScatter',
        coordinateSystem: 'geo',
        data: [
            {
                name: '纽约',
                value: [40.7128, -74.0060]
            },
            // 其他点...
        ],
        symbolSize: function (val) {
            return val[2] / 10;
        },
        showEffectOn: 'render',
        rippleEffect: {
            brushType: 'stroke'
        },
        hoverAnimation: true,
        label: {
            normal: {
                formatter: '{b}',
                position: 'right',
                show: true
            },
            emphasis: {
                position: 'left',
                show: true
            }
        },
        itemStyle: {
            normal: {
                color: '#f4e925',
                shadowBlur: 10,
                shadowColor: '#333'
            }
        },
        zlevel: 1
    }
]

案例九:路径地图

通过路径地图展示地理位置间的路线。

series: [
    {
        type: 'lines',
        coordinateSystem: 'geo',
        data: [
            {
                coords: [
                    [116.397128, 39.90923],
                    [113.280637, 23.125178]
                ]
            },
            // 其他路线...
        ],
        lineStyle: {
            curveness: 0.2,
            width: 1
        }
    }
]

案例十:热力地图

使用热力地图展示密集程度。

series: [
    {
        type: 'heatmap',
        coordinateSystem: 'geo',
        data: [
            {
                name: '北京',
                value: [116.46, 39.92]
            },
            // 其他点...
        ],
        pointSize: 50,
        blurSize: 50
    }
]

案例十一:地图缩放和旋转

通过鼠标滚轮和拖动操作,实现地图的缩放和旋转。

myChart.on('zoom', function (params) {
    console.log(params);
});

myChart.on('rotate', function (params) {
    console.log(params);
});

案例十二:自定义工具栏

自定义图表的工具栏,如全图、保存为图片等。

myChart.showLoading();
myChart.setOption({
    title: {
        text: 'ECharts 图表工具栏'
    },
    tooltip: {},
    toolbox: {
        feature: {
            dataZoom: {},
            restore: {},
            saveAsImage: {}
        }
    },
    series: [{
        // ...其他配置...
    }]
});
myChart.hideLoading();

案例十三:多系列地图

在同一个地图中展示多个系列的数据。

series: [
    {
        // 系列一...
    },
    {
        // 系列二...
    },
    // 其他系列...
]

案例十四:动画效果

为地图添加动画效果,使展示更加生动。

animation: true,
animationDuration: 1000,
animationEasing: 'cubicInOut',

案例十五:地图样式自定义

自定义地图的样式,如颜色、边框、阴影等。

itemStyle: {
    normal: {
        borderColor: '#f0f0f0',
        areaColor: '#f5f5f5',
        shadowBlur: 10,
        shadowColor: '#333'
    },
    emphasis: {
        areaColor: '#e1e1e1'
    }
},

案例十六:地图数据转换

将数据从一种格式转换为另一种格式,以便更好地展示。

var data = [
    {name: '北京', value: [116.46, 39.92]},
    {name: '上海', value: [121.4737, 31.2304]}
];
var transData = data.map(function (item) {
    return {
        name: item.name,
        value: [item.value[0], item.value[1], 1]
    };
});

案例十七:地图缩放比例

调整地图的缩放比例,以适应不同的展示需求。

myChart.setOption({
    series: [{
        // ...其他配置...
        zoom: 1.2
    }]
});

案例十八:地图旋转角度

调整地图的旋转角度,以展示不同的视角。

myChart.setOption({
    series: [{
        // ...其他配置...
        rotation: 45
    }]
});

案例十九:地图标注

在地图上添加标注,以便更好地说明问题。

series: [{
    // ...其他配置...
    label: {
        normal: {
            formatter: '{b}'
        }
    }
}]

案例二十:地图背景图片

添加背景图片,以美化地图。

myChart.setOption({
    series: [{
        // ...其他配置...
        backgroundImage: 'url(https://example.com/background.jpg)'
    }]
});

案例二十一:地图事件监听

监听地图事件,如点击、鼠标移入等。

myChart.on('click', function (params) {
    console.log(params.name + ': ' + params.value);
});

案例二十二:地图数据过滤

根据条件过滤地图数据,以展示特定信息。

myChart.setOption({
    series: [{
        // ...其他配置...
        data: data.filter(function (item) {
            return item.value[0] > 120 && item.value[1] > 30;
        })
    }]
});

案例二十三:地图数据聚合

对地图数据进行聚合处理,以便更好地展示。

myChart.setOption({
    series: [{
        // ...其他配置...
        data: data.map(function (item) {
            var point = item.value;
            return {
                name: item.name,
                value: [point[0], point[1], Math.sqrt(point[0] * point[0] + point[1] * point[1])]
            };
        })
    }]
});

案例二十四:地图数据排序

根据数据值对地图数据进行排序。

myChart.setOption({
    series: [{
        // ...其他配置...
        data: data.sort(function (a, b) {
            return a.value[2] - b.value[2];
        })
    }]
});

案例二十五:地图数据分组

对地图数据进行分组,以便更好地展示。

myChart.setOption({
    series: [{
        // ...其他配置...
        data: data.map(function (item) {
            return {
                name: item.name,
                value: item.value,
                itemStyle: {
                    normal: {
                        color: 'red' // 红色表示一组数据
                    }
                }
            };
        })
    }]
});

案例二十六:地图数据对比

在同一张地图上对比不同数据。

myChart.setOption({
    series: [{
        // ...其他配置...
        data: data.map(function (item) {
            return {
                name: item.name,
                value: [item.value[0], item.value[1], item.value[0] + item.value[1]]
            };
        })
    }]
});

案例二十七:地图数据动态加载

动态加载地图数据,以便更好地展示。

myChart.setOption({
    series: [{
        // ...其他配置...
        data: data,
        dataZoom: {
            type: 'slider',
            start: 0,
            end: 50
        }
    }]
});

案例二十八:地图数据导出

将地图数据导出为其他格式,如CSV。

var table = document.createElement('table');
var thead = document.createElement('thead');
var tbody = document.createElement('tbody');
table.appendChild(thead);
table.appendChild(tbody);
data.forEach(function (item) {
    var tr = document.createElement('tr');
    tr.innerHTML = '<td>' + item.name + '</td><td>' + item.value + '</td>';
    tbody.appendChild(tr);
});
document.body.appendChild(table);

案例二十九:地图数据可视化效果优化

优化地图数据可视化效果,如颜色、字体、阴影等。

myChart.setOption({
    series: [{
        // ...其他配置...
        itemStyle: {
            normal: {
                color: '#f4e925',
                shadowBlur: 10,
                shadowColor: '#333'
            },
            emphasis: {
                color: '#e1e1e1'
            }
        }
    }]
});

案例三十:地图数据动态交互

实现地图数据动态交互,如点击跳转、弹出框等。

myChart.on('click', function (params) {
    if (params.componentType === 'series') {
        // 实现交互效果,如跳转或弹出框
    }
});

通过以上30个实用案例,您已经可以轻松掌握ECharts地图图表的制作。在今后的项目中,您可以根据实际需求灵活运用这些案例,制作出更加美观、实用的地图图表。祝您在数据可视化领域取得丰硕的成果!

分享到: