首页编程开发ECharts【数据可视化(EChart...

【数据可视化(ECharts篇)】38.地理数据可视化——绘制矢量地图

本系列文章配套代码获取有以下两种途径:

  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1W26KrZK7RjwgxvulccTA9w?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取:
https://github.com/returu/Data_Visualization





之前对地理数据可视化时一直使用的是百度地图底图:
33.地理数据可视化——加载地图底图
本次将在ECharts中绘制矢量地图。
01
绘制矢量地图:

绘制矢量地图需要使用到地理坐标系组件geo,该组件用于地图的绘制,支持在地理坐标系上绘制散点图,线集。

在ECharts中绘制矢量地图的步骤如下:

  • 读取GeoJson 格式的地图数据;
  • 通过echarts. registerMap函数将上一步读取的数据注册为ECharts可用的地图。
  • 在地理坐标系组件geo中的map参数中使用 registerMap 注册的地图,即指定注册的地图作为坐标系。

echarts. registerMap是Echarts中用于注册地图的函数。它可以将第三方地图或自定义地图数据与Echarts进行集成,使用Echarts的API进行绘制。使用方法如下: echarts.registerMap(mapName, mapData)的参数mapName是地图的名称, mapData是地图的数据。注册后可以使用这个地图名称在Echarts中使用这个地图。

设置完地图后,可以通过label和itemStyle等参数对地图显示效果进行一些处理操作:

完整代码如下所示:

    // 读取中国省级行政区划的Geo数据 china.json
    $.getJSON('data/china.json', function(china) {

        console.log(china)

        // 注册绘制中国地图
        echarts.registerMap('baseMap', china)

        // 设置图表的参数
        var option = {

            // 地理坐标系组件
            geo: {
                map: 'baseMap', //map属性对应注册地图中的地图名称
                aspectScale: 0.75, // 用于设置地图的长宽比,当绘制小范围底图时,可能需要将其设置为1
                // 图形上的文本标签样式
                label: {
                    // 高亮状态下的标签样式
                    emphasis: {
                        show: true,
                        color: 'red',
                    }
                },
                // 地图区域的多边形 图形样式
                itemStyle: {
                    borderWidth: 2,
                    borderColor: '#808080', // 图形的描边颜色
                    shadowColor: '#ccc', // 阴影颜色
                    shadowBlur: 3, // 图形阴影的模糊大小
                }
            },


            // 数据系列
            series: [],
        };
可视化结果如下图所示:

02
绘制OD图:

下面使用【36.地理数据可视化——OD图】中的OD数据在上面完成的矢量地图上绘制OD图。
数据格式以及配置项的参数设置在此就不做过多介绍,不了解的可以查看上述文章内容。
代码如下所示:
    // 读取中国省级行政区划的Geo数据 china.json
    $.getJSON('data/china.json', function(china) {
        $.getJSON('data/data.json', function(data) {
            $.getJSON('data/city_points.json', function(city_points) {

                console.log(china)

                // 注册绘制中国地图
                echarts.registerMap('baseMap', china)

                // 设置图表的参数
                var option = {

                    // 地理坐标系组件
                    geo: {
                        map: 'baseMap', //map属性对应注册地图中的地图名称
                        aspectScale: 0.75, // 用于设置地图的长宽比,当绘制小范围底图时,可能需要将其设置为1
                        // 图形上的文本标签样式
                        label: {
                            // 高亮状态下的标签样式
                            emphasis: {
                                show: true,
                                color: 'red',
                            }
                        },
                        // 地图区域的多边形 图形样式
                        itemStyle: {
                            borderWidth: 2,
                            borderColor: '#808080', // 图形的描边颜色
                            shadowColor: '#ccc', // 阴影颜色
                            shadowBlur: 3, // 图形阴影的模糊大小
                        }
                    },

                    title: {
                        text: "北京迁入人口来源地",
                        textStyle: { color: "#000", fontSize: 30 },
                        subtext: "数据来源:纯属虚构",
                        subtextStyle: { color: "#000" },
                        left: "center"
                    },

                    // 视觉映射组件
                    visualMap: {
                        max: 100,
                        inRange: {
                            color: ['green', '#eac736', '#d94e5d'],
                            colorAlpha: [0, 1]
                        },
                    },


                    // 数据系列
                    series: [{
                        type: 'lines', // lines 类型图表
                        coordinateSystem: 'geo', // 该系列使用的坐标系
                        data: data,
                        // 线样式
                        lineStyle: {
                            normal: {
                                // color: '#fff', // #a6c84c
                                width: 2, // 线宽
                                curveness: 0.1 // 边的曲度,支持从 0 到 1 的值,值越大曲度越大
                            }
                        },
                        // 线特效的配置
                        effect: {
                            show: true, // 是否显示特效
                            period: 10, // 特效动画的时间,单位为 s
                            constantSpeed: 100, // 配置特效图形的移动动画是否是固定速度,单位像素/秒
                            trailLength: 0.7, // 特效尾迹的长度。取从 0 到 1 的值,数值越大尾迹越长
                            symbolSize: 3 // 特效标记的大小
                        },
                    }, {
                        type: 'effectScatter',
                        coordinateSystem: 'geo', // 带有涟漪特效动画的散点(气泡)图
                        // 图形上的文本标签
                        label: {
                            // 
                            emphasis: {
                                show: true,
                                position: 'right', // 标签的位置
                                fontSize: 15,
                                // 标签内容格式器
                                // 通过回调函数设置显示内容:城市名称+迁徙量
                                formatter: function(params) { return params['name'] + ' - ' + params['value'][2] }
                            }
                        },
                        data: city_points,
                        // 通过回调函数设置标记的大小
                        // params[2]为每个OD的迁徙量
                        symbolSize: function(params) { return params[2] ** 0.5 * 1.5 }
                    }],
                };
可视化结果如下图所示:

03
OD图深化:

在上述可视化结果下,矢量地图中各个省市根据人口迁徙量数值的大小显示为不同深浅的颜色。
在ECharts中对地理区域数据的可视化,需要将series中的type设置为"map"。
需要注意的是,因为矢量地图也需要使用到visualMap,因此需要为OD点线和矢量地图分别设置相对应的visualMap组件,通过seriesIndex来指定系列中的数据。
代码如下所示:
    // 读取中国省级行政区划的Geo数据 china.json
    $.getJSON('data/china.json', function(china) {
        $.getJSON('data/data.json', function(data) {
            $.getJSON('data/city_points.json', function(city_points) {

                console.log(data)
                console.log(city_points)

                // 注册绘制中国地图
                echarts.registerMap('baseMap', china)

                // 设置图表的参数
                var option = {

                    // 地理坐标系组件
                    geo: {
                        map: 'baseMap', //map属性对应注册地图中的地图名称
                        aspectScale: 0.75, // 用于设置地图的长宽比,当绘制小范围底图时,可能需要将其设置为1
                        // 图形上的文本标签样式
                        label: {
                            // 高亮状态下的标签样式
                            emphasis: {
                                show: true,
                                color: 'red',
                            }
                        },
                        // 地图区域的多边形 图形样式
                        itemStyle: {
                            borderWidth: 2,
                            borderColor: '#808080', // 图形的描边颜色
                            shadowColor: '#ccc', // 阴影颜色
                            shadowBlur: 3, // 图形阴影的模糊大小
                        }
                    },

                    title: {
                        text: "北京迁入人口来源地",
                        textStyle: { color: "#000", fontSize: 30 },
                        subtext: "数据来源:纯属虚构",
                        subtextStyle: { color: "#000" },
                        left: "center"
                    },

                    // 视觉映射组件
                    visualMap: [{
                        max: 100,
                        inRange: {
                            color: ['green', '#eac736', '#d94e5d'],
                            colorAlpha: [0, 1]
                        },
                        // 指定取哪个系列的数据
                        seriesIndex: [0, 1],
                        show:false
                    },{
                        max: 200,
                        inRange: { color: ['#fff', '#000'] },
                        // 指定取哪个系列的数据
                        seriesIndex: 2,
                        show:false
                    }],


                    // 数据系列
                    series: [{
                        type: 'lines', // lines 类型图表
                        coordinateSystem: 'geo', // 该系列使用的坐标系
                        data: data,
                        // 线样式
                        lineStyle: {
                            normal: {
                                // color: '#fff', // #a6c84c
                                width: 2, // 线宽
                                curveness: 0.1 // 边的曲度,支持从 0 到 1 的值,值越大曲度越大
                            }
                        },
                        // 线特效的配置
                        effect: {
                            show: true, // 是否显示特效
                            period: 10, // 特效动画的时间,单位为 s
                            constantSpeed: 100, // 配置特效图形的移动动画是否是固定速度,单位像素/秒
                            trailLength: 0.7, // 特效尾迹的长度。取从 0 到 1 的值,数值越大尾迹越长
                            symbolSize: 3 // 特效标记的大小
                        },
                    }, {
                        type: 'effectScatter',
                        coordinateSystem: 'geo', // 带有涟漪特效动画的散点(气泡)图
                        // 图形上的文本标签
                        label: {
                            // 
                            emphasis: {
                                show: true,
                                position: 'right', // 标签的位置
                                fontSize: 15,
                                // 标签内容格式器
                                // 通过回调函数设置显示内容:城市名称+迁徙量
                                formatter: function(params) { return params['name'] + ' - ' + params['value'][2] }
                            }
                        },
                        data: city_points,
                        // 通过回调函数设置标记的大小
                        // params[2]为每个OD的迁徙量
                        symbolSize: function(params) { return params[2] ** 0.5 * 1.5 }
                    }, {
                        // 地图主要用于地理区域数据的可视化
                        type: 'map',
                        // 通过geoIndex指定一个geo组件。这样的话,map和其他series就可以共享一个geo组件了
                        geoIndex: 0,
                        data: city_points
                    }],
                };
可视化结果如下图所示:


更多参数和配置可以查看官方文档:

1https://echarts.apache.org/zh/option.html


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments