Echarts地图实现:各省市计划录取人数

Echarts地图实现:各省市计划录取人数

实现功能

本文将介绍如何使用 ECharts 制作一个展示中国人民大学2017年各省市计划录取人数的地图。我们将实现以下图表形式:

  • 地图:基础的地图展示,反映不同省市的录取人数。
  • 散点图:在地图上以散点的形式展示每个省市的录取人数。
  • 热力图:(如果数据和需求适合,可以添加热力图的实现)

效果预览

GIF 2024-6-28 11-50-20

实现思路

  1. 准备地图数据和录取人数数据。
  2. 使用 ECharts 初始化地图,并加载地理坐标数据。
  3. 配置散点图和地图系列,将数据与地图结合。
  4. 通过视觉映射(visualMap)展示不同录取人数的级别。
  5. 添加交互功能,如工具箱(toolbox)和提示信息(tooltip)。

关键代码

HTML结构

<div id="ECharts" class="EChartBox"></div>

JavaScript代码

<div id="ECharts" class="EChartBox"></div>
<script src="./jquery.min.js"></script>
<script src="./echarts.min.5.2.js"></script>
<script type="application/javascript">
    window.onload = function () {
        // 初始化 ECharts 图表
        $.getJSON('./Geochina.json', function (res) {
            echarts.registerMap('china', res)
            var myChart = echarts.init(document.getElementById('ECharts'));
            var name_title = "中国人民大学2017年各省市计划录取人数"
            var subname = '数据爬取自千栀网\n,\n上海、浙江无文理科录取人数'
            var nameColor = " rgb(55, 75, 113)"
            var name_fontFamily = '等线'
            var subname_fontSize = 15
            var name_fontSize = 18
            var mapName = 'china'
            var data = [
                {name: "北京", value: 177},
                {name: "天津", value: 42},
                {name: "河北", value: 102},
                {name: "山西", value: 81},
                {name: "内蒙古", value: 47},
                {name: "辽宁", value: 67},
                {name: "吉林", value: 82},
                {name: "黑龙江", value: 66},
                {name: "上海", value: 24},
                {name: "江苏", value: 92},
                {name: "浙江", value: 114},
                {name: "安徽", value: 109},
                {name: "福建", value: 116},
                {name: "江西", value: 91},
                {name: "山东", value: 119},
                {name: "河南", value: 137},
                {name: "湖北", value: 116},
                {name: "湖南", value: 114},
                {name: "重庆", value: 91},
                {name: "四川", value: 125},
                {name: "贵州", value: 62},
                {name: "云南", value: 83},
                {name: "西藏", value: 9},
                {name: "陕西", value: 80},
                {name: "甘肃", value: 56},
                {name: "青海", value: 10},
                {name: "宁夏", value: 18},
                {name: "新疆", value: 67},
                {name: "广东", value: 123},
                {name: "广西", value: 59},
                {name: "海南", value: 14},
            ];

            var geoCoordMap = {};
            var toolTipData = [
                {name: "北京", value: [{name: "文科", value: 95}, {name: "理科", value: 82}]},
                {name: "天津", value: [{name: "文科", value: 22}, {name: "理科", value: 20}]},
                {name: "河北", value: [{name: "文科", value: 60}, {name: "理科", value: 42}]},
                {name: "山西", value: [{name: "文科", value: 40}, {name: "理科", value: 41}]},
                {name: "内蒙古", value: [{name: "文科", value: 23}, {name: "理科", value: 24}]},
                {name: "辽宁", value: [{name: "文科", value: 39}, {name: "理科", value: 28}]},
                {name: "吉林", value: [{name: "文科", value: 41}, {name: "理科", value: 41}]},
                {name: "黑龙江", value: [{name: "文科", value: 35}, {name: "理科", value: 31}]},
                {name: "上海", value: [{name: "文科", value: 12}, {name: "理科", value: 12}]},
                {name: "江苏", value: [{name: "文科", value: 47}, {name: "理科", value: 45}]},
                {name: "浙江", value: [{name: "文科", value: 57}, {name: "理科", value: 57}]},
                {name: "安徽", value: [{name: "文科", value: 57}, {name: "理科", value: 52}]},
                {name: "福建", value: [{name: "文科", value: 59}, {name: "理科", value: 57}]},
                {name: "江西", value: [{name: "文科", value: 49}, {name: "理科", value: 42}]},
                {name: "山东", value: [{name: "文科", value: 67}, {name: "理科", value: 52}]},
                {name: "河南", value: [{name: "文科", value: 69}, {name: "理科", value: 68}]},
                {name: "湖北", value: [{name: "文科", value: 60}, {name: "理科", value: 56}]},
                {name: "湖南", value: [{name: "文科", value: 62}, {name: "理科", value: 52}]},
                {name: "重庆", value: [{name: "文科", value: 47}, {name: "理科", value: 44}]},
                {name: "四川", value: [{name: "文科", value: 65}, {name: "理科", value: 60}]},
                {name: "贵州", value: [{name: "文科", value: 32}, {name: "理科", value: 30}]},
                {name: "云南", value: [{name: "文科", value: 42}, {name: "理科", value: 41}]},
                {name: "西藏", value: [{name: "文科", value: 5}, {name: "理科", value: 4}]},
                {name: "陕西", value: [{name: "文科", value: 38}, {name: "理科", value: 42}]},
                {name: "甘肃", value: [{name: "文科", value: 28}, {name: "理科", value: 28}]},
                {name: "青海", value: [{name: "文科", value: 5}, {name: "理科", value: 5}]},
                {name: "宁夏", value: [{name: "文科", value: 10}, {name: "理科", value: 8}]},
                {name: "新疆", value: [{name: "文科", value: 36}, {name: "理科", value: 31}]},
                {name: "广东", value: [{name: "文科", value: 63}, {name: "理科", value: 60}]},
                {name: "广西", value: [{name: "文科", value: 29}, {name: "理科", value: 30}]},
                {name: "海南", value: [{name: "文科", value: 8}, {name: "理科", value: 6}]},
            ];

            /*获取地图数据*/
            myChart.showLoading();
            var mapFeatures = echarts.getMap(mapName).geoJson.features;
            myChart.hideLoading();
            mapFeatures.forEach(function (v) {
                // 地区名称
                var name = v.properties.name;
                // 地区经纬度
                geoCoordMap[name] = v.properties.cp;

            });

            // console.log("============geoCoordMap===================")
            // console.log(geoCoordMap)
            // console.log("================data======================")
            console.log(data)
            console.log(toolTipData)
            var max = 480,
                min = 9; // todo
            var maxSize4Pin = 100,
                minSize4Pin = 20;

            var convertData = function (data) {
                var res = [];
                for (var i = 0; i < data.length; i++) {
                    var geoCoord = geoCoordMap[data[i].name];
                    if (geoCoord) {
                        res.push({
                            name: data[i].name,
                            value: geoCoord.concat(data[i].value),
                        });
                    }
                }
                return res;
            };
            option = {
                title: {
                    text: name_title,
                    subtext: subname,
                    x: 'center',
                    textStyle: {
                        color: nameColor,
                        fontFamily: name_fontFamily,
                        fontSize: name_fontSize
                    },
                    subtextStyle: {
                        fontSize: subname_fontSize,
                        fontFamily: name_fontFamily
                    }
                },
                tooltip: {
                    trigger: 'item',
                    formatter: function (params) {
                        if (typeof (params.value)[2] == "undefined") {
                            var toolTiphtml = ''
                            for (var i = 0; i < toolTipData.length; i++) {
                                if (params.name == toolTipData[i].name) {
                                    toolTiphtml += toolTipData[i].name + ':<br>'
                                    for (var j = 0; j < toolTipData[i].value.length; j++) {
                                        toolTiphtml += toolTipData[i].value[j].name + ':' + toolTipData[i].value[j].value + "<br>"
                                    }
                                }
                            }
                            console.log(toolTiphtml)
                            // console.log(convertData(data))
                            return toolTiphtml;
                        } else {
                            var toolTiphtml = ''
                            for (var i = 0; i < toolTipData.length; i++) {
                                if (params.name == toolTipData[i].name) {
                                    toolTiphtml += toolTipData[i].name + ':<br>'
                                    for (var j = 0; j < toolTipData[i].value.length; j++) {
                                        toolTiphtml += toolTipData[i].value[j].name + ':' + toolTipData[i].value[j].value + "<br>"
                                    }
                                }
                            }
                            console.log(toolTiphtml)
                            // console.log(convertData(data))
                            return toolTiphtml;
                        }
                    }
                },
                // legend: {
                //     orient: 'vertical',
                //     y: 'bottom',
                //     x: 'right',
                //     data: ['credit_pm2.5'],
                //     textStyle: {
                //         color: '#fff'
                //     }
                // },
                visualMap: {
                    show: true,
                    min: 0,
                    max: 200,
                    left: 'left',
                    top: 'bottom',
                    text: ['高', '低'], // 文本,默认为数值文本
                    calculable: true,
                    seriesIndex: [1],
                    inRange: {
                        // color: ['#3B5077', '#031525'] // 蓝黑
                        // color: ['#ffc0cb', '#800080'] // 红紫
                        // color: ['#3C3B3F', '#605C3C'] // 黑绿
                        // color: ['#0f0c29', '#302b63', '#24243e'] // 黑紫黑
                        // color: ['#23074d', '#cc5333'] // 紫红
                        color: ['#00467F', '#A5CC82'] // 蓝绿
                        // color: ['#1488CC', '#2B32B2'] // 浅蓝
                        // color: ['#00467F', '#A5CC82'] // 蓝绿
                        // color: ['#00467F', '#A5CC82'] // 蓝绿
                        // color: ['#00467F', '#A5CC82'] // 蓝绿
                        // color: ['#00467F', '#A5CC82'] // 蓝绿

                    }
                },
                /*工具按钮组*/
                // toolbox: {
                //     show: true,
                //     orient: 'vertical',
                //     left: 'right',
                //     top: 'center',
                //     feature: {
                //         dataView: {
                //             readOnly: false
                //         },
                //         restore: {},
                //         saveAsImage: {}
                //     }
                // },
                geo: {
                    show: true,
                    map: mapName,
                    label: {
                        normal: {
                            show: false
                        },
                        emphasis: {
                            show: false,
                        }
                    },
                    roam: true,
                    itemStyle: {
                        normal: {
                            areaColor: '#031525',
                            borderColor: '#3B5077',
                        },
                        emphasis: {
                            areaColor: '#2B91B7',
                        }
                    }
                },
                series: [{
                    name: '散点',
                    type: 'scatter',
                    coordinateSystem: 'geo',
                    data: convertData(data),
                    symbolSize: function (val) {
                        return val[2] / 10;
                    },
                    label: {
                        normal: {
                            formatter: '{b}',
                            position: 'right',
                            show: true
                        },
                        emphasis: {
                            show: true
                        }
                    },
                    itemStyle: {
                        normal: {
                            color: '#05C3F9'
                        }
                    }
                },
                    {
                        type: 'map',
                        map: mapName,
                        geoIndex: 0,
                        aspectScale: 0.75, //长宽比
                        showLegendSymbol: false, // 存在legend时显示
                        label: {
                            normal: {
                                show: true
                            },
                            emphasis: {
                                show: false,
                                textStyle: {
                                    color: '#fff'
                                }
                            }
                        },
                        roam: true,
                        itemStyle: {
                            normal: {
                                areaColor: '#031525',
                                borderColor: '#3B5077',
                            },
                            emphasis: {
                                areaColor: '#2B91B7'
                            }
                        },
                        animation: false,
                        data: data
                    },
                    {
                        name: '点',
                        type: 'scatter',
                        coordinateSystem: 'geo',
                        symbol: 'pin', //气泡
                        symbolSize: function (val) {
                            var a = (maxSize4Pin - minSize4Pin) / (max - min);
                            var b = minSize4Pin - a * min;
                            b = maxSize4Pin - a * max;
                            return a * val[2] + b;
                        },
                        label: {
                            normal: {
                                show: true,
                                textStyle: {
                                    color: '#fff',
                                    fontSize: 9,
                                }
                            }
                        },
                        itemStyle: {
                            normal: {
                                color: '#F62157', //标志颜色
                            }
                        },
                        zlevel: 6,
                        data: convertData(data),
                    },
                    {
                        name: 'Top 5',
                        type: 'effectScatter',
                        coordinateSystem: 'geo',
                        data: convertData(data.sort(function (a, b) {
                            return b.value - a.value;
                        }).slice(0, 5)),
                        symbolSize: function (val) {
                            return val[2] / 10;
                        },
                        showEffectOn: 'render',
                        rippleEffect: {
                            brushType: 'stroke'
                        },
                        hoverAnimation: true,
                        label: {
                            normal: {
                                formatter: '{b}',
                                position: 'right',
                                show: true
                            }
                        },
                        itemStyle: {
                            normal: {
                                color: 'yellow',
                                shadowBlur: 10,
                                shadowColor: 'yellow'
                            }
                        },
                        zlevel: 1
                    },

                ]
            };
            myChart.setOption(option);
        })
    }
</script>

注意事项

  • 确保地图数据的准确性。
  • 根据实际数据调整视觉映射的 minmax 值。
  • 考虑不同屏幕下的适配问题。

完整代码和json文件

点我下载完整代码和json文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/752305.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为od 2024 | 什么是华为od,od 薪资待遇,od机试题清单

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…

【系统架构设计师】四、嵌入式基础知识(软件|软件设计|硬件|式总线逻辑)

目录 一、嵌入式软件 1.1 嵌入式软件分类 1.2 板级支持包(BSP) 1.3 BootLoader 1.4 设备驱动程序 二、嵌入式软件设计 2.1 编码 2.2 交叉编译 2.3 交叉调试 三、嵌入式系统硬件的分类 3.1 根据用途分类 3.2 存储器分类 四、内&#xff08;外&#xff09;总线逻辑 …

江科大笔记—FLASH闪存

FLASH闪存 程序现象&#xff1a; 1、读写内部FLASH 这个代码的目的&#xff0c;就是利用内部flash程序存储器的剩余空间&#xff0c;来存储一些掉电不丢失的参数。所以这里的程序是按下K1变换一下测试数据&#xff0c;然后存储到内部FLASH&#xff0c;按下K2把所有参数清0&…

力扣每日一题 6/23 字符串/模拟

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 520.检测大写字母【简单】 题目&#xff1a; 我们定义&#xff0c;在以下…

【web开发】chrome拦截localhost跨域请求原因

在设置中&#xff0c;默认屏蔽了&#xff0c;请求不会到localhost服务器 chrome://flags/#block-insecure-private-network-requests 设置disable即可

solidworks钣金工厂共享云桌面方案

随着信息技术的飞速发展和企业数字化转型的深入&#xff0c;传统的钣金工厂面临着诸多挑战&#xff0c;其中之一就是如何在保证数据安全的前提下&#xff0c;提高设计、生产和管理的效率。 SolidWorks是一款专业的三维3D设计软件&#xff0c;功能强悍&#xff0c;支持分布式数…

Word页眉横线怎么删除?5个方法,记得收藏!

在数字化办公日益普及的今天&#xff0c;Word文档成为了我们日常工作中不可或缺的一部分。然而&#xff0c;在编辑和排版Word文档时&#xff0c;我们有时会面临一些看似微小却令人头疼的问题&#xff0c;比如页眉中的横线。这条不起眼的横线&#xff0c;就像是在整洁的页面上划…

基于SpringBoot的藏区特产销售平台

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; SpringBoot框架 工具&#xff1a; MyEclipse 系统展示 首页 个人中心 特产信息管理 订单管…

CentOS安装Docker教程(包含踩坑的经验)

目录 一.基础安装 ▐ 安装Docker 二.启动Docker服务 三.配置Docker镜像加速 一.基础安装 在安装Docker之前可能需要先做以下准备 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-…

现货黄金如何操作:黄金技术性止损的运用

止损是现货黄金如何操作中不得不提及的方法。在现货黄金投资过程中&#xff0c;风险是存在的&#xff0c;重要的是如何将风险把控好。这里的一个重要概念就是&#xff0c;要对每一笔交易设定好止损&#xff0c;可以讲&#xff0c;这就是现货黄金如何操作的方法中最重要的一种。…

重磅!免费一键批量混剪工具它来了,一天上万短视频不是梦

很多做短视频营销的朋友需要批量生成大量的短视频&#xff0c;但是市面上的工具一是不好用&#xff0c;二是要收费。 今天给大家介绍一款免费的&#xff0c;可以自动化批量生成短视频的工具MoneyPrinterPlus。 同时支持windows和linux平台。 有了它&#xff0c;一天生成上万短…

揭秘搜索引擎核心机制:网页爬行、索引、预处理、建立索引、查询处理与结果排序策略的深入解读

搜索引擎的工作原理与流程是一个复杂而精细的系统工程&#xff0c;旨在帮助用户从互联网的海量信息中快速找到最相关、最有价值的内容。 理解搜索引擎工作原理对于内容创作、网站优化、广告投放及日常搜索至关重要。它能指导网页设计更加友好&#xff0c;提高搜索引擎排名&…

AGI大模型的门槛是什么?怎么学

AGI&#xff08;Artificial General Intelligence&#xff0c;通用人工智能&#xff09;大模型&#xff0c;即具备类似人类智能的、能够理解、学习、应用知识和技能并解决各种复杂问题的通用型人工智能模型&#xff0c;目前仍然是人工智能研究的前沿领域&#xff0c;具有以下门…

检测SD NAND文件系统异常和修复的方法

目录 1、打开命令提示符&#xff1a; 2、运行chkdsk命令&#xff1a; 3、命令参数说明&#xff1a; chkdsk是Windows中的一个命令行工具&#xff0c;用于检查磁盘上的文件系统错误和修复坏块。MK米客方德为您提供指导&#xff0c;以下是使用chkdsk的步骤&#xff1a; 1、打开…

bodypaint如何恢复布局设置

1.老师我手贱&#xff0c;布局改了&#xff0c;怎么恢复 2.左边咋没有纹理这个窗口了用来放参考图的 窗口&#xff0c;新建纹理视图&#xff0c;点那九点&#xff0c;拖拽&#xff0c;改变悬浮窗的状态

我只有一点Python基础,对学习WebGIS开发有帮助吗?

经常有人后台私信问&#xff0c;我只有一点Python基础&#xff0c;对学习GIS开发有帮助吗&#xff1f; 关于这个问题的答案是&#xff0c;当然有&#xff01;Python适用于WebGIS开发。WebGIS是地理信息系统&#xff08;GIS&#xff09;技术与Web技术的结合&#xff0c;而Pytho…

Rethinking Semantic Segmentation: A Prototype View 2022CVPR Oral

流行的语义分割方案的掩码解码策略&#xff08;基于参数softmax或基于像素查询&#xff09;视为可学习的类原型。本研究揭示了这种参数分割策略的几个局限性&#xff0c;并提出了一种基于不可学习原型的非参数替代方案。与之前的方法以完全参数化的方式为每个类学习单个权重/查…

realsense无法连接,xioctl(VIDIOC_S_FMT) failed, errno=5

开发环境&#xff1a; 虚拟机VMware Pro17下Ubuntu22.04 ROS2 humble 过程 使用realsense的sdk封装&#xff0c;然后封成ROS节点&#xff0c;启动失败 报错 xioctl(VIDIOC_S_FMT) failed, errno5 解决方法 不用虚拟机就好了

【机器学习】高斯混合模型(Gaussian Mixture Models, GMM)深度解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 高斯混合模型&#xff08;Gaussian Mixture Models, GMM&#xff09;深度解析引…

智慧法务引领:构筑数字化法治核心,塑造未来企业竞争力

在全球化及信息化时代背景下&#xff0c;企业面临的法律环境越来越复杂&#xff0c;法治数字化成为企业维护合法权益、提升市场竞争力的必然选择。智慧法务管理系统作为推动企业法治数字化转型的重要工具&#xff0c;不仅提高了法律服务效率&#xff0c;而且加强了企业的法律风…