当前位置: 首页 > news >正文

Python绘图-12地理数据可视化

Matplotlib 4 类别 地理投影: Aitoff, Hammer, Mollweide Lambert 投影,可以 合以下四 不同
了解四 不同投影 区别

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_longitudecentral_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投影方式对比说明

  1. Aitoff投影
    • 特点:Aitoff投影是经过改进的方位投影,采用椭圆形经纬网的折衷投影。它适用于绘制小比例的世界地图。
    • 适用场景:由于其经纬网的特性,Aitoff投影在展示全球数据时能够保持较好的形状和面积平衡,但会引入一定程度的畸变。
    • 发明者:由俄罗斯制图员David A. Aitoff于1889年开发。
  2. Hammer投影(哈默投影)
    • 特点:Hammer投影是由等面积横轴方位投影派生而来,它等面积地表示整个世界。其经纬线网交点坐标由等面积横轴方位投影的每一横坐标乘以2得到,并重新注记经线。
    • 适用场景:Hammer投影常用于制作小比例尺世界地图,因为它能够保持全球面积的比例不变,这对于需要准确展示面积分布的地图尤为重要。
    • 发明者:由德国学者H.H.E.哈默(H.H.Ernst von Hammer)于1892年应用Aitoff变换方法拟定。
  3. Mollweide投影(摩尔威德投影)
    • 特点:Mollweide投影是一种等面积伪圆柱投影,它将经线投影成为椭圆曲线。这种投影方式能够保持全球面积的比例。
    • 适用场景:由于其等面积的特性,Mollweide投影在需要准确反映面积分布的地图制作中特别有用,如气候学、地理学等领域的研究。
    • 发明者:由德国数学家摩尔威德(K.B.Mollweide)于1805年创拟。
  4. 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 完成产品兼容认证&#xf…...

旅游专业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)是一门跨平台、面向对象的脚本语言,是用来控制网页行为的,它能使网页可交互(脚本语言就不需要编译,直接通过浏览器…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...