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)是一门跨平台、面向对象的脚本语言,是用来控制网页行为的,它能使网页可交互(脚本语言就不需要编译,直接通过浏览器…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
