ECharts 是一个使用 JavaScript 实现的开源可视化库,它提供了丰富的图表类型,包括地图图表。地图图表可以直观地展示地理位置数据,非常适合于地理信息系统、市场分析等领域。本文将为你详细介绍如何使用 ECharts 制作地图图表,并提供 50 个实用案例解析,帮助你快速掌握地图图表的制作技巧。

1. ECharts 地图图表简介

ECharts 地图图表是基于 SVG 渲染的,可以展示各种地理信息数据。它支持多种地图类型,如中国地图、世界地图、行政区划地图等。此外,ECharts 地图图表还支持多种交互效果,如点击、缩放、拖拽等。

2. 制作地图图表的基本步骤

  1. 引入 ECharts 库:在 HTML 文件中引入 ECharts 库。
  2. 设置地图数据:定义地图数据,包括地图类型、坐标系统、地理坐标等。
  3. 配置图表选项:设置图表的标题、图例、系列等选项。
  4. 初始化图表:使用 echarts.init() 方法初始化图表。

3. 50个实用案例解析

案例一:中国地图

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)},
                {name: '上海', value: Math.round(Math.random() * 1000)},
                // ... 其他城市数据
            ]
        }
    ]
};

myChart.setOption(option);

案例二:世界地图

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

var option = {
    title: {
        text: '世界地图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '世界地图',
            type: 'map',
            mapType: 'world',
            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 = {
    title: {
        text: '行政区划地图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '行政区划地图',
            type: 'map',
            mapType: '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 = {
    title: {
        text: '点击事件'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '点击事件',
            type: 'map',
            mapType: 'china',
            label: {
                show: true
            },
            data: [
                {name: '北京', value: Math.round(Math.random() * 1000)},
                {name: '上海', value: Math.round(Math.random() * 1000)},
                // ... 其他城市数据
            ],
            itemStyle: {
                emphasis: {
                    label: {
                        show: true
                    }
                }
            }
        }
    ]
};

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

myChart.setOption(option);

案例五:缩放效果

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)},
                {name: '上海', value: Math.round(Math.random() * 1000)},
                // ... 其他城市数据
            ],
            zoom: 1.2
        }
    ]
};

myChart.setOption(option);

案例六:拖拽效果

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)},
                {name: '上海', value: Math.round(Math.random() * 1000)},
                // ... 其他城市数据
            ],
            roam: true
        }
    ]
};

myChart.setOption(option);

案例七:自定义地图

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

var option = {
    title: {
        text: '自定义地图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '自定义地图',
            type: 'map',
            mapType: 'custom',
            label: {
                show: true
            },
            data: [
                {name: '北京市', value: Math.round(Math.random() * 1000)},
                {name: '上海市', value: Math.round(Math.random() * 1000)},
                // ... 其他城市数据
            ],
            // 自定义地图数据
            geoCoordMap: {
                '北京市': [116.46, 39.92],
                '上海市': [121.47, 31.23],
                // ... 其他城市坐标
            }
        }
    ]
};

myChart.setOption(option);

案例八:地图热力图

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

var option = {
    title: {
        text: '地图热力图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图热力图',
            type: 'heatmap',
            coordinateSystem: 'geo',
            data: [
                {name: '北京市', value: [116.46, 39.92, Math.round(Math.random() * 1000)]},
                {name: '上海市', value: [121.47, 31.23, Math.round(Math.random() * 1000)]},
                // ... 其他城市数据
            ]
        }
    ]
};

myChart.setOption(option);

案例九:地图气泡图

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

var option = {
    title: {
        text: '地图气泡图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图气泡图',
            type: 'scatter',
            coordinateSystem: 'geo',
            data: [
                {name: '北京市', value: [116.46, 39.92, Math.round(Math.random() * 1000)]},
                {name: '上海市', value: [121.47, 31.23, Math.round(Math.random() * 1000)]},
                // ... 其他城市数据
            ],
            symbolSize: function (val) {
                return val[2] / 10;
            }
        }
    ]
};

myChart.setOption(option);

案例十:地图折线图

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

var option = {
    title: {
        text: '地图折线图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图折线图',
            type: 'line',
            coordinateSystem: 'geo',
            data: [
                {name: '北京市', value: [116.46, 39.92, Math.round(Math.random() * 1000)]},
                {name: '上海市', value: [121.47, 31.23, Math.round(Math.random() * 1000)]},
                // ... 其他城市数据
            ],
            markLine: {
                silent: false,
                data: [
                    {name: '连接线', xAxis: 116.46, yAxis: 39.92},
                    {name: '连接线', xAxis: 121.47, yAxis: 31.23},
                    // ... 其他城市连接线
                ]
            }
        }
    ]
};

myChart.setOption(option);

案例十一:地图柱状图

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

var option = {
    title: {
        text: '地图柱状图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图柱状图',
            type: 'bar',
            coordinateSystem: 'geo',
            data: [
                {name: '北京市', value: Math.round(Math.random() * 1000)},
                {name: '上海市', value: Math.round(Math.random() * 1000)},
                // ... 其他城市数据
            ],
            markLine: {
                silent: false,
                data: [
                    {name: '连接线', xAxis: 116.46, yAxis: 39.92},
                    {name: '连接线', xAxis: 121.47, yAxis: 31.23},
                    // ... 其他城市连接线
                ]
            }
        }
    ]
};

myChart.setOption(option);

案例十二:地图散点图

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

var option = {
    title: {
        text: '地图散点图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图散点图',
            type: 'scatter',
            coordinateSystem: 'geo',
            data: [
                {name: '北京市', value: [116.46, 39.92, Math.round(Math.random() * 1000)]},
                {name: '上海市', value: [121.47, 31.23, Math.round(Math.random() * 1000)]},
                // ... 其他城市数据
            ]
        }
    ]
};

myChart.setOption(option);

案例十三:地图雷达图

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

var option = {
    title: {
        text: '地图雷达图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图雷达图',
            type: 'radar',
            coordinateSystem: 'geo',
            data: [
                {name: '北京市', value: [116.46, 39.92, Math.round(Math.random() * 1000)]},
                {name: '上海市', value: [121.47, 31.23, Math.round(Math.random() * 1000)]},
                // ... 其他城市数据
            ]
        }
    ]
};

myChart.setOption(option);

案例十四:地图饼图

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

var option = {
    title: {
        text: '地图饼图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图饼图',
            type: 'pie',
            coordinateSystem: 'geo',
            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 = {
    title: {
        text: '地图漏斗图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图漏斗图',
            type: 'funnel',
            coordinateSystem: 'geo',
            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 = {
    title: {
        text: '地图力导向图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图力导向图',
            type: 'force',
            coordinateSystem: 'geo',
            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 = {
    title: {
        text: '地图桑基图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图桑基图',
            type: 'sankey',
            coordinateSystem: 'geo',
            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 = {
    title: {
        text: '地图树状图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图树状图',
            type: 'tree',
            coordinateSystem: 'geo',
            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 = {
    title: {
        text: '地图水波纹图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图水波纹图',
            type: 'wave',
            coordinateSystem: 'geo',
            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 = {
    title: {
        text: '地图水球图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图水球图',
            type: 'gauge',
            coordinateSystem: 'geo',
            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 = {
    title: {
        text: '地图水滴图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图水滴图',
            type: 'drop',
            coordinateSystem: 'geo',
            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 = {
    title: {
        text: '地图水滴球图'
    },
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            name: '地图水滴球图',
            type: 'gauge',
            coordinateSystem: 'geo',
            data: [
                {name: '北京市', value: Math.round(Math.random() * 1000)},
                {name: '上海市', value: Math.round(Math.random() * 1000)},
                // ... 其他城市数据
            ]
        }
    ]
};

myChart.setOption(option);

案例二十三:地图水滴环图

”`javascript var myChart = echarts.init(document.getElementById(‘main’));

var option = {

title: {
    text: '地图水滴环图'
},
tooltip: {
    trigger: 'item'
},
series: [
    {
        name: '地图水滴环图',
        type: 'ring',
        coordinateSystem: 'geo',
        data: [
            {name: '北京市', value: Math.round(Math.random() * 1000