Python绘图-12地理数据可视化
12.1Aitoff投影
12.1.1图像呈现
12.1.2绘图代码
import numpy as np # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块,用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams,它用于处理matplotlib的配置参数
# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {"font.family": 'serif', "font.size": 10.5, "mathtext.fontset": 'stix', "font.serif": ['SimSun']}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams['axes.unicode_minus'] = False # 运行配置参数总的轴(axes)正常显示正负号(minus)N = 100# 定义数据点的数量为100
np.random.seed(157)# 设置随机种子,使生成的随机数可复现
long = np.random.random(N) * 360 - 180# 生成[-180, 180]范围内的随机经度
lat = np.random.random(N) * 180 - 90# 生成[-90, 90]范围内的随机纬度
plt.figure(figsize=(12, 7), dpi=110)# 创建一个新的图形窗口,并设置其大小和分辨率
plt.subplot(111,projection="aitoff" )# 创建一个子图,使用aitoff投影方式
plt.scatter(long, lat, marker='*', color='red', s=40)# 在子图上绘制散点图,设置散点样式、颜色和大小
plt.title("Aitoff")
plt.grid(True)# 显示网格线
plt.show()
12.2 Hammer投影
12.2.1图像呈现
12.2.2绘图代码
import numpy as np # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块,用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams,它用于处理matplotlib的配置参数# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {"font.family": 'serif', "font.size": 10.5, "mathtext.fontset": 'stix', "font.serif": ['SimSun']}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams['axes.unicode_minus'] = False # 运行配置参数总的轴(axes)正常显示正负号(minus)
# 导入cartopy的crs模块,crs代表坐标参考系统(Coordinate Reference Systems)
import cartopy.crs as ccrs
# 导入cartopy的feature模块,这个模块提供了一些自然地理特征,如陆地、海洋等
import cartopy.feature as cfeature# 创建一个新的图形和坐标轴
fig = plt.figure(figsize=(10, 5))
# 在图形中添加一个子图,设置其位置为1行1列的第1个位置,并设置其投影为Hammer投影
ax = fig.add_subplot(1, 1, 1, projection=ccrs.Hammer())# 向坐标轴中添加自然地理特征,这里添加的是陆地和海洋
ax.add_feature(cfeature.LAND)
ax.add_feature(cfeature.OCEAN)
# 设置坐标轴的范围为全球,即显示整个地球
ax.set_global()
# 在坐标轴上绘制网格线,并设置draw_labels为True,表示在网格线上绘制标签
ax.gridlines(draw_labels=True)# 显示图形
plt.show()
12.3Mollweide投影
12.3.1图像呈现
12.3.2绘图代码
import numpy as np # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块,用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams,它用于处理matplotlib的配置参数# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {"font.family": 'serif', "font.size": 10.5, "mathtext.fontset": 'stix', "font.serif": ['SimSun']}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams['axes.unicode_minus'] = False # 运行配置参数总的轴(axes)正常显示正负号(minus)
import cartopy.crs as ccrs
import cartopy.feature as cfeature# 创建一个新的图形和坐标轴,设置投影为Mollweide
fig = plt.figure(figsize=(10, 5))
# 在图形中添加一个子图,并设置其投影为Mollweide投影
# Mollweide投影是一种等面积伪圆柱投影,能保持全球面积的比例
ax = fig.add_subplot(1, 1, 1, projection=ccrs.Mollweide())# 向坐标轴中添加自然地理特征
# 添加陆地、海洋、国界(用虚线表示)和河流
ax.add_feature(cfeature.LAND)
ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.BORDERS, linestyle=':')
ax.add_feature(cfeature.RIVERS)# 设置坐标轴范围为全球
ax.set_global()# 如果需要,可以添加网格线
ax.gridlines()# 显示图形
plt.show()
12.4Lambert投影
12.4.1图像呈现【方法1】
12.4.2绘图代码
import numpy as np # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块,用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams,它用于处理matplotlib的配置参数# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {"font.family": 'serif', "font.size": 10.5, "mathtext.fontset": 'stix', "font.serif": ['SimSun']}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams['axes.unicode_minus'] = False # 运行配置参数总的轴(axes)正常显示正负号(minus)
N = 100
np.random.seed(157)
long = np.random.random(N) * 2 * np.pi - np.pi
lat = np.random.random(N) * np.pi - (np.pi / 2)
plt.figure(figsize=(12, 7), dpi=110)
plt.subplot(111,projection="lambert")
plt.scatter(long, lat, marker='*', color='red', s=40)
plt.title("Lambert")
plt.grid(True)plt.show()
12.4.3图像呈现【方法二】
12.4.4绘图代码
import numpy as np # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt # 导入matplotlib的绘图模块,用于可视化
from matplotlib import rcParams # 从matplotlib中导入rcParams,它用于处理matplotlib的配置参数# 定义一个字典config,其中包含字体、大小和其他相关的配置参数
config = {"font.family": 'serif', "font.size": 10.5, "mathtext.fontset": 'stix', "font.serif": ['SimSun']}
rcParams.update(config) # 使用config字典中的配置参数更新rcParams
plt.rcParams['axes.unicode_minus'] = False # 运行配置参数总的轴(axes)正常显示正负号(minus)
N = 100
np.random.seed(157)
long = np.random.random(N) * 2 * np.pi - np.pi
lat = np.random.random(N) * np.pi - (np.pi / 2)
plt.figure(figsize=(12, 7), dpi=110)
plt.subplot(111,projection="lambert")
plt.scatter(long, lat, marker='*', color='red', s=40)
plt.title("Lambert")
plt.grid(True)plt.show()
代码注释:
这段代码首先导入了必要的模块,然后创建了一个图形和一个子图,并设置了投影为Lambert Conformal投影。通过central_longitude
和central_latitude
参数,你可以设置投影的中心点。在这个例子中,中心经度设置为-90.0(西经90度),中心纬度设置为45.0(北纬45度),这通常用于展示北半球的地图。
然后,使用set_extent
方法设置了地图的边界范围。crs=ccrs.PlateCarree()
表示边界范围是在经纬度坐标系(Plate Carree投影)下定义的。
接下来,通过add_feature
方法添加了陆地、海洋、国界和河流等自然地理特征。
最后,使用gridlines
方法添加了网格线,并通过plt.show()
显示了图形。
12.5几种绘图方式的比较
Aitoff投影、Hammer投影、Mollweide投影和Lambert投影都是地理学和地图制作中常用的投影方式,它们各自具有不同的特点和适用场景。
12.5.1投影方式对比说明
- Aitoff投影:
- 特点:Aitoff投影是经过改进的方位投影,采用椭圆形经纬网的折衷投影。它适用于绘制小比例的世界地图。
- 适用场景:由于其经纬网的特性,Aitoff投影在展示全球数据时能够保持较好的形状和面积平衡,但会引入一定程度的畸变。
- 发明者:由俄罗斯制图员David A. Aitoff于1889年开发。
- Hammer投影(哈默投影):
- 特点:Hammer投影是由等面积横轴方位投影派生而来,它等面积地表示整个世界。其经纬线网交点坐标由等面积横轴方位投影的每一横坐标乘以2得到,并重新注记经线。
- 适用场景:Hammer投影常用于制作小比例尺世界地图,因为它能够保持全球面积的比例不变,这对于需要准确展示面积分布的地图尤为重要。
- 发明者:由德国学者H.H.E.哈默(H.H.Ernst von Hammer)于1892年应用Aitoff变换方法拟定。
- Mollweide投影(摩尔威德投影):
- 特点:Mollweide投影是一种等面积伪圆柱投影,它将经线投影成为椭圆曲线。这种投影方式能够保持全球面积的比例。
- 适用场景:由于其等面积的特性,Mollweide投影在需要准确反映面积分布的地图制作中特别有用,如气候学、地理学等领域的研究。
- 发明者:由德国数学家摩尔威德(K.B.Mollweide)于1805年创拟。
- Lambert投影(兰伯特投影):
- 特点:Lambert投影是一种保形投影,它在一定区域内保持形状的真实性。它有多种变种,如正轴Lambert投影、斜轴Lambert投影等。
- 适用场景:Lambert投影常用于特定区域的地图制作,如中纬度地区的详细地图。由于其保形特性,它在需要准确反映形状和方向的应用中表现出色。
- 发明者与变种:Lambert投影由德国数学家Johann Heinrich Lambert提出,并有多种变种以适应不同的地图制作需求。
12.5.2总结归纳
- Aitoff投影和Hammer投影都适用于小比例尺的世界地图制作,其中Aitoff投影更注重形状和面积的平衡,而Hammer投影则强调面积的准确性。
- Mollweide投影以其等面积的特性在需要反映面积分布的地图制作中占据优势。
- Lambert投影则以其保形特性在特定区域地图制作中表现出色。
在选择投影方式时,需要根据地图的用途、比例尺、展示的数据类型以及所需的准确性和可读性等因素进行综合考虑。
相关文章:

Python绘图-12地理数据可视化
Matplotlib 自 带 4 类别 地理投影: Aitoff, Hammer, Mollweide 及 Lambert 投影,可以 结 合以下四 张 不同 的 图 了解四 种 不同投影 区别 。 12.1Aitoff投影 12.1.1图像呈现 12.1.2绘图代码 import numpy as np # 导入numpy库,用于…...

NineData与OceanBase完成产品兼容认证,共筑企业级数据库新生态
近日,云原生智能数据管理平台 NineData 和北京奥星贝斯科技有限公司的 OceanBase 数据库完成产品兼容互认证。经过严格的联合测试,双方软件完全相互兼容、功能完善、整体运行稳定且性能表现优异。 此次 NineData 与 OceanBase 完成产品兼容认证…...
旅游专业VR虚拟仿真情景教学实训
一、生动的情景模拟 VR技术能够创建出高度逼真的虚拟环境,使学生能够身临其境地体验旅游场景。无论是古色古香的古代建筑,还是充满异国情调的热带雨林,亦或是繁华的都市风光,VR都能一一呈现。这种沉浸式的体验,使得学…...

解决方案TypeError: string indices must be integers
文章目录 一、现象:二、解决方案 一、现象: PyTorch深度学习框架,运行bert-mini,本地环境是torch1.4-gpu,发现报错显示:TypeError: string indices must be integers 后面报字符问题,百度过找…...

【论文阅读】Segment Anything论文梳理
Abstract 我们介绍了Segment Anything(SA)项目:新的图像分割任务、模型和数据集。高效的数据循环采集,使我们建立了迄今为止最大的分割数据集,在1100万张图像中,共超过10亿个掩码。 该模型被设计和训练为可…...

接口自动化测试框架搭建:基于python+requests+pytest+allure实现
众所周知,目前市面上大部分的企业实施接口自动化最常用的有两种方式: 1、基于代码类的接口自动化,如: PythonRequestsPytestAllure报告定制 2、基于工具类的接口自动化,如: PostmanNewmanJenkinsGit/svnJme…...
蓝桥杯(3.9)
1210. 连号区间数 蓝桥杯暴力过80% import java.util.Arrays; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] res new int[n];int[] copy new int[n];for(int i0;i&…...

万物皆可Find My,伦茨科技ST17H6x芯片赋能产品苹果Find My功能
苹果的Find My功能使得用户可以轻松查找iPhone、Mac、AirPods以及Apple Watch等设备。如今Find My还进入了耳机、充电宝、箱包、电动车、保温杯等多个行业。苹果发布AirTag发布以来,大家都更加注重物品的防丢,苹果的 Find My 就可以查找 iPhone、Mac、Ai…...
UHF无线麦克风方案的特点
U段无线麦克风方案是一种基于UHF频段的无线音频传输技术。相比于传统的VHF频段和2.4GHZ频段,U段频谱资源更为宽阔,信号传输更加稳定可靠。 1.广阔的频谱资源:U段频段通常指450MHZ至900MH之间的频谱范围,相比于VHF频段的100MH至30…...

STM32 学习10 PWM输出
STM32 学习10 PWM输出 一、PWM简介1. PWM的概念2. PWM的工作原理3. PWM 常用的应用场景 二、一些概念1. 频率2. 占空比 三、STM32F1 PWM介绍1. 定时器与寄存器(1)**自动重装载寄存器(ARR)**:(2)…...
SQL语言(数据库编程)
一.select查询 在数据库编程中,SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库管理系统(RDBMS)的标准编程语言。其中,SELECT 是 SQL 中最常用的查询语句,用于从数据库表中检索数据。 下面是一个基本的 SELECT 查询的示例: SELECT column1…...
C#面向对象(OOPs)中的多态性
本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com C#面向对象(OOPs)中的多态性 概述:在编程语言和类型理论中,多态性是为不同类型的实体提供单个接口,或者使用单个符号来表示多个不同的类型。多态对象是能够呈现多种形式的…...

(二十一)从零开始搭建k8s集群——kubernates核心组件及功能介绍
前言 Kubernetes是一个可移植、可扩展、开源的平台,用于管理容器化的工作负载和服务,它促进了声明性配置和自动化。Kubernetes容器可以持续开发、集成和部署:可靠且频繁地构建和部署容器镜像,快速有效地回滚;开发与运…...

[云原生] k8s之存储卷
一、emptyDir存储卷 当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每…...

【PCL】(二十七)基于法线差的点云分割
(二十七)基于法线差的点云分割 图片来源 提出这个方法的论文:Difference of Normals as a Multi-Scale Operator in Unorganized Point Clouds 算法流程: 在大尺度的范围内(半径 r 1 r_1 r1)估计每个点…...

智慧公厕系统的组成部分有什么?
智慧公厕系统是现代城市管理中一项重要的创新,利用物联网、互联网、大数据、云计算、自动化控制等先进的技术手段,提供高效便捷的公厕服务。从信息系统的角度来看,智慧公厕系统主要由硬件、软件和网络组成,硬件、软件和网络三大部…...
[数据集][目标检测]芒果叶病害数据集VOC+YOLO格式4000张5类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4000 标注数量(xml文件个数):4000 标注数量(txt文件个数):4000 标注…...

Linux: 预备
计算机结构基础 操作系统: 内核 (管理软硬件) shell(给用户使用操作系统的方式) 操作系统的目标 对硬件抽象 原因:操作系统是对软硬件资源管理的应用软件抽象:内存管理, 进程管理, 文件管理, 驱动管理软件:驱动程序(给软件提供访问硬件的软件)硬件:磁盘(对应文件), 网卡等隔离…...

ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办?
ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办? 在订阅 ChatGPT Plus 时,有时候会出现以下报错 : We are unable to authenticate your payment method. 我们未能验证您的支付方式。 出现 unable to a…...

JavaWeb - 3 - JavaScript(JS)
JavaScript(JS)官方参考文档:JavaScript 教程 JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言,是用来控制网页行为的,它能使网页可交互(脚本语言就不需要编译,直接通过浏览器…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...