【Python]】地图热力图如何绘制?(含源代码)

news2025/1/19 20:41:47

文章目录

  • 一、问题引入 & 使用地图的说明
    • 1.1 问题的引入
    • 1.2 使用地图的说明
  • 二、方法1
  • 三、方法2

一、问题引入 & 使用地图的说明

1.1 问题的引入

我们有一个中国各省份的数据集,要求绘制地图热力图,该怎么实现呢?

部分数据集如下:

在这里插入图片描述

最后两列表示经纬度。

1.2 使用地图的说明

特别提醒:文中尽量不用世界、全国地图,能用表格表达的尽量用表格表达!

如果一定要用,凡涉国界图件(国内部分地区、全国、世界部分地区、全球)必须使用国家测绘局地理信息局标准地图底图,所用底图边界要完全无修改(包括南海诸岛位置),为适应排版时图的缩放,比例尺一律用线划比例尺,而不用数字比例尺。

并在图题下注明“注:该图基于国家测绘地理信息局标准地图服务网站下载的审图号为GS(2016)xxxx 号的标准地图制作,底图无修改。”。

编辑部的核心要求是:使用国家测绘局地理信息局标准地图底图,所用底图边界要完全无修改。并未要求提供审图号,因此我们无需提交审图,只需按这条要求提供地图即可。

我认为,要想满足这个要求,需要做到以下几点:

(1)shapefile地图为官方提供。这样可以保证地图边界无误,坐标系无误。

(2)使用EPS格式的标准地图作为底图。EPS格式标准地图中的各项要素均可编辑,可以删除不需要的文字图层,可以改变色块填充的颜色、样式,同时可以保证出图清晰。

(3)将shapefile地图调整为投影坐标系,导出为EPS格式,叠加在不改变行政边界的标准地图上。

【能不用尽量不要用!】

二、方法1

# 创建Basemap对象
map = Basemap(llcrnrlon=75, llcrnrlat=15, urcrnrlon=135, urcrnrlat=55, projection='lcc', lat_1=33, lat_2=45, lon_0=105, resolution='l')

# 绘制海岸线、边界和国家
map.drawcoastlines()
map.drawcountries()
map.drawstates()

# 填充地图背景颜色
map.fillcontinents(color='lightgray', lake_color='white')

# 绘制经纬线
map.drawparallels(range(-90, 91, 10), labels=[1, 0, 0, 0], fontsize=10, linewidth=0.5, color='gray')
map.drawmeridians(range(0, 360, 10), labels=[0, 0, 0, 1], fontsize=10, linewidth=0.5, color='gray')

# 将经纬度转换为Basemap坐标
x, y = map(data['long'].values, data['lat'].values)
map.scatter(x, y, c=data['value'], cmap='hot_r', s=100, alpha=0.8)

# 添加颜色条
plt.colorbar(label='Value')
plt.title('Heatmap of Values in China')
plt.show()

这段代码使用了Basemap库来创建一个地图对象,并在地图上绘制了中国地区的热力图。

首先,创建了一个Basemap对象,指定了地图的经纬度范围(llcrnrlon, llcrnrlat, urcrnrlon, urcrnrlat),投影方式(projection)为兰勃特投影(‘lcc’),中心经纬度(lon_0)为105,以及分辨率(resolution)为低分辨率(‘l’)。

接下来,使用Basemap对象的方法绘制了海岸线、边界和国家的轮廓,使用了drawcoastlines()、drawcountries()和drawstates()方法。

然后,使用fillcontinents()方法填充地图的陆地颜色为灰色,水域颜色为白色。

接着,使用drawparallels()和drawmeridians()方法绘制经纬线,设置了经纬线的范围、标签位置、字体大小、线宽和颜色。

之后,将经纬度坐标转换为Basemap坐标,使用scatter()方法在地图上绘制散点图,其中x和y分别表示经纬度坐标转换后的Basemap坐标,c表示散点的颜色,s表示散点的大小,alpha表示散点的透明度。

最后,使用colorbar()方法添加颜色条,指定了颜色条的标签(label),并使用title()方法设置地图的标题。最后使用show()方法显示地图。

展示的结果为:

在这里插入图片描述
【注意:上图只是一个示范案例,并非用于学术等其他领域】

三、方法2

from pyecharts import options as opts
from pyecharts.charts import Map


lst1 = []
lst2 = []
for i in range(len(data)):
    lst1.append(data.iloc[i, 1])
    lst2.append(int(data.iloc[i, 2]))

 
c = (
    Map(init_opts=opts.InitOpts(width = "1600px", height = "800px"))
    .add("城市", [list(z) for z in zip(lst1, lst2)], "china")
    .set_global_opts(
        title_opts=opts.TitleOpts(title = "中国产业)"),
        visualmap_opts=opts.VisualMapOpts(max_ = 60000, is_piecewise=True, 
        pieces=[
            {"min": 0, "max": 10000, "label": "0-10000", "color": "#FFB6C1"},
            {"min": 10000, "max": 20000, "label": "10000-20000", "color": "#FF6666"},
            {"min": 20000, "max": 30000, "label": "20000-30000", "color": "#FF6600"},
            {"min": 30000, "max": 40000, "label": "30000-40000", "color": "#FF0000"},
            {"min": 40000, "max": 100000, "label": "40000-100000", "color": "#990033"}
            ])
    )
    .render("产业.html")
)

这段代码使用了pyecharts库来创建一个中国地图,并将数据中的城市和产业值添加到地图上。

首先,创建了两个空列表lst1和lst2,用于存储数据中的城市名称和产业值。

然后,通过循环遍历数据中的每一行,将城市名称和产业值分别添加到lst1和lst2中。其中,data.iloc[i, 1]表示数据中第i行的第2列(城市名称),data.iloc[i, 2]表示数据中第i行的第3列(产业值)。

接下来,导入所需的库和模块,并创建一个Map对象c。在Map对象的初始化参数中,设置了地图的宽度和高度为"1600px"和"800px"。

然后,使用add()方法将数据添加到地图中。其中,通过列表解析生成了城市和产业值的二维列表,[list(z) for z in zip(lst1, lst2)]表示将lst1和lst2中对应位置的元素打包成元组,并转换为列表。"china"表示地图的区域范围为中国。

接着,使用set_global_opts()方法设置全局配置项。title_opts用于设置地图的标题,visualmap_opts用于设置视觉映射选项。在visualmap_opts中,max_指定了视觉映射的最大值,is_piecewise=True表示视觉映射为分段模式,pieces列表用于设置分段的取值范围、标签和颜色。

最后,使用render()方法将地图渲染为HTML文件,并指定文件名为"产业.html"。

执行以上代码后,将生成一个名为"产业.html"的HTML文件,其中包含了中国地图以及对应城市的产业值颜色映射。

在这里插入图片描述
【注意:上图只是一个示范案例,并非用于学术等其他领域】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

23种设计模式之迭代器模式(Iterator Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的迭代器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬…

今天公司来了个拿 30K 出来的测试,实在太牛了....

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的时候都惊…

无惧面试,2023最新最全Java面试手册全网首次开放下载

最近感慨面试难的人越来越多了,一方面是市场环境,更重要的一方面是企业对Java的人才要求越来越高了。 ​基本上这样感慨的分为两类人,第一,虽然挂着3、5年经验,但肚子里货少,也没啥拿得出手的项目&#xff…

vue2介绍(入门)

目录 声明式渲染 v-bind v-if条件与循环 name命名 学会log打印 一些js方法 双向绑定v-model和v-bind 那么请实现一个复选框吧 自定义标签模板 声明式渲染 我感觉这里文档的意思是双向绑定, 或许需要清理一下js缓存机制 ,嗯...不懂,响应式&…

视频理解学习笔记(三)

视频理解学习笔记(三) 时间梳理结果对比从hand-crafted到deep-learningDeepVideo论文概览 (Slow Fusion) Two-Stream and Its VariantsTwo-Stream CNN (Late Fusion)Beyond Short Snippets (Two-Stream LSTM/ConvPooling)3DConv 3DPool, Early Fusion …

Java学习路线(14)——Map集合类

一、介绍 概念 Map集合是一种双列集合,每个元素包含两个数据。元素格式:【keyvalue】键值对元素Map又称为 “键值对集合” Map集合格式: {key1value1,key2value2,key3value3,…} 二、Map集合的特点 Map家族图 1、说明: 使用…

期末复习总结【MySQL】库和表的基本操作 + 增删改查CURD

文章目录 前言一、数据库的基本操作1, 查看库2, 创建库3, 使用库4, 删除库 二、表的基本操作1, 创建表2, 查看表3, 查看表结构4, 删除表 三、增加(Create)四、查询(Retrieve) (重点)1, 全列查询2, 指定列查询3, 查询字段为表达式4, 指定别名5, 去重6, 排序7, 条件查询7.1, 基本…

Hbase操作

(1) 启动 启动顺序:Hadoop--zookeeper—hbase 主进程:HMaster 从进程:HRegionServer 确认进程是否正常 (2) 进入终端 [rootmaster ~]# hbase shell (3) 查看状态 命令:status 表示有3台机器,0台down掉&…

软件测试3年以为的躺平了,没想到还得内卷,这题太难了...

前段时间我同事(做测试的一个妹子)跟我讲,感觉早上起来十分的疲惫,不想上班,问我们这是什么样的现象,其实有时候我也有这种感觉,虽然我卷,但我也是肉体凡胎啊!不是机器人…

Qt, Text Edit 和 Plain Text Edit关于调整字体样式的问题

问题: 在编写小案例的过程中需要使用一个文本容器用于显示文本效果, 因为涉及文本字体的 加粗, 倾斜, 下划线, 以及颜色效果, 这里使用了 Text Edit 组件, 但是使用后发现容器中的文本无法实现同时设置 加粗 倾斜 下划线的情况, 且单独设置时只有 下划线 有效果, 加粗 倾斜 均无…

C++模板(详解)

非类型模板参数 模板参数可分为类型形参和非类型形参。类型形参: 出现在模板参数列表中,跟在class或typename关键字之后的参数类型名称。非类型形参: 用一个常量作为类(函数)模板的一个参数,在类&#xff…

字节跳动测试岗面试挂在二面,我复盘总结了失败原因,决定再战一次

先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,字节的游戏专场又是最早开始的,就投递了&#xf…

hystart++ 出炉

周三早上同事发我一个 rfc 9406 链接,microsoft hystart 标准化了,此前只是一个 draft。 说说我的看法。 信收敛不信测量,tcp 是端到端高熵体,对网络一无所知,过度信任测量则无法消除长尾,且可能劣化 p99…

Metasploit入门教程(非常详细)从零基础入门到精通,看完这一篇就够了!

通过本篇文章,我们将会学习以下内容: 1、在Windows上安装Metasploit 2、在Linux和MacOS上安装Metasploit 3、在Kali Linux中使用 Metasploit 4、升级Kali Linux 5、使用虚拟化软件构建渗透测试实验环境 6、配置SSH连接 7、使用SSH连接Kali 8、配…

【牛客刷题专栏】0x32:JZ45 把数组排成最小的数(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…

【算法】LFU及其优化

文章目录 什么是LFU?设计思路代码实现(基础版本)参考论文代码实现(优化版本)区别 什么是LFU? LRU及其实现 上文讲解了LRU,他是一个基于最近是否被访问来做缓存淘汰的策略。 那么今天介绍一个新…

Postman的简单使用:

1. Postman 1.1 背景 当前主流的开发模式为:前后端分离开发。 前端人员开发前端工程,后端人员开发后端工程,只需要依据这份接口文档即可。在后端开发过程中每开发完一个功能,就需要对这个功能接口进行测试,由于现在是…

图灵完备游戏:信号计数 解法记录

使用1个全加器 2个半加器完成。这关的思想主旨在于如何把输出4,输出2,输出1的情况统一在一根导线上。 首先用一个全加器来完成输入2-4这三个引脚的计数,因为全加器输出范围二进制是00 - 11,而输入正好有两个引脚数位是2和1&…

linux周六串讲

esc. //粘贴复制上一条命令的参数 cat /etc/resolv.conf //查看DNS地址 route -n //查看网关 hostname //临时修改主机名 hostnamectl set-hostname 名称 //永久修改主机名 ssh root192.168.10.233 //用windows远程的格式,在CMD窗口输入这个命令 …

MYSQL数据库测评及整改

1、查询数据库版本:select version(); 2、查询已安装的插件:show plugins; 3、查询插件安装的位置: show variables like "%plugin_dir%"; 4、查询用户:选择数据库: select host,user,plugin from user; 5、…