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

news2024/10/5 18:27:08
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投影则以其保形特性在特定区域地图制作中表现出色。

在选择投影方式时,需要根据地图的用途、比例尺、展示的数据类型以及所需的准确性和可读性等因素进行综合考虑。

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

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

相关文章

2024年大语言模型的微调

一个LLM的生命周期包含多个步骤,下面将讨论这个周期中最活跃、最密集的部分之一 -- fine-tuning(微调)过程。 LLM的生命周期 下面展示了LLM的生命周期: 愿景和范围:首先需要定义项目的愿景,你想让你的LLM作为一个更加通用的工具…

双体系Java学习之关键字,标识符以及命名规范

刚开学,然后之前的课程暂时停在了多态,接下来开始跟着学校的步伐重新开始学一下,谢谢!!! 之前的课程也会找个时间补起来的,谢谢大家! 关键字 标识符 命名规范

STM 32 HAL库 内部FLash读写调试的问题

问题1:STM32G0 系列 256KB内部FLash大小,无法读写 分析:从STM32F103C8 移植过来的Flash操作代码,发现无法进行读写,返回 HAL_ERROR 错误,随后,检查在写之前是否擦除成功,检查代码发…

Oracle VM VirtualBox 安装完Ubuntu系统后一直提示安装Ubuntu

是因为存储设置有问题,把Ubuntu镜像添加进去了,移除后重启虚拟机就不会提示了 以下是配置的移除后的界面。

羊大师揭秘,女性喝羊奶有什么好处

羊大师揭秘,女性喝羊奶有什么好处 女性喝羊奶有多种好处。首先,羊奶富含钙元素,有助于预防女性体内缺钙和老年女性骨质疏松,从而增强骨骼密度。其次,羊奶中的色氨酸和烟酸等成分有助于促进睡眠,改善睡眠质…

NLP_文本张量表示方法_2(代码示例)

目标 了解什么是文本张量表示及其作用.文本张量表示的几种方法及其实现. 1 文本张量表示 将一段文本使用张量进行表示,其中一般将词汇为表示成向量,称作词向量,再由各个词向量按顺序组成矩阵形成文本表示. ["人生", "该&q…

探索安全与灵活性的边界,波卡账户抽象与多签管理的创新之路

相信大家在刚刚进入 web3 的时候都或多或少面临着一个普遍而棘手的问题,私钥的安全管理。私钥一旦丢失或被盗,用户将永久失去对他们加密资产的访问权。此外,随着区块链应用场景的多样化,这种单一模式已经无法满足复杂的交易结构和…

鸿蒙App基础

像素单位 .1、基础单位 为开发者提供4种像素单位,框架采用vp为基准数据单位。 PS:个人建议使用lpx,配置好配置文件,这里就可以按照UI设计稿实际的来,可以更好的实现设计效果 名称描述px屏幕物理像素单位vp屏幕密度相…

Unity 给刚体一个力或速度

创建平面和小球,给力或给速度让其弹起 给小球挂载刚体(Rigibdody)和脚本 (力是累计或者衰减的,直接给速度就是赋值,但如果速度就和力类似了) using System.Collections; using System.Collect…

防御保护IPSEC实验

要求:在FW5和FW3之间建立一条IPSEC通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24. 因为是双机热备状态则只需要配置FW1主设备。 新建ACL待加密数据流 安全建议: IPSec参数配置 FW3配置如下与FW1类似: FW1中新建安全策略…

根据xlsx文件第一列的网址爬虫

seleniumXpath 在与该ipynb文件同文件下新增一个111.xlsx,第一列放一堆需要爬虫的同样式网页 然后使用seleniumXpath爬虫 from selenium import webdriver from selenium.webdriver.common.by import By import openpyxl import timedef crawl_data(driver, url)…

如何选择VR全景设备,才能拍摄高质量的VR全景?

随着VR全景技术的不断成熟和发展,VR全景已经成为了摄影爱好者乐于尝试的新手段,VR全景也为广大用户提供了一个全新的视角来探索世界,如果想要拍摄出高质量的VR全景,选择合适的VR全景拍摄设备以及掌握正确的拍摄技巧才是关键。 VR全…

SpringMVC的工作流程简介

SpringMVC控制器工作流程 用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet所拦截; DispatcherServlet拦截到请求后,会调用HandlerMapping处理器映射器; 处理器映射器根据请求URL找到具体的处理器,生成处理…

备忘 clang diagnostic 类的应用示例 ubuntu 22.04

系统的ncurses环境有些问题 通过源码安装了ncurses6.3后,才可以在 llvmort-18.1.rc4中编译通过示例: 1,折腾环境 ncurses-6.3$ ./configure ncurses-6.3$ make -j ncurses-6.3$ sudo make install sudo apt install libtinfo5 sudo…

企业计算机服务器中了halo勒索病毒如何解密,halo勒索病毒数据恢复流程

随着网络技术的不断发展,企业的生产运营效率得到了极大提升,越来越多的企业开始利用网络开展各项工作业务,企业的网络数据安全问题,成为大家关心的主要话题。近期,云天数据恢复中心接到多家企业的求助,企业…

Mybatis从入门到CRUD到分页到日志到Lombok到动态SQL再到缓存

Mybatis 入门 1.导入maven依赖 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version> </dependency>2.配置核心文件 <?xml version"1.0" encoding"U…

Flask python开发篇: 写一个简单的接口

第一步&#xff1a;新建flask项目 参考使用pycharm新建一个项目 打开pycharm&#xff0c;根据下面图中箭头顺序&#xff0c;新建一个flask的项目&#xff1b; 第二步&#xff1a;运行项目&#xff0c; 安装成功以后&#xff0c;会有个app.py文件&#xff0c;打开以后&#…

【博士每天一篇文献-实验】Is a Modular Architecture Enough?

阅读时间&#xff1a;2023-11-26 1 介绍 年份&#xff1a;2022 作者&#xff1a;Sarthak Mittal&#xff0c;Yoshua Bengio&#xff0c;蒙特利尔大学 期刊&#xff1a; Advances in Neural Information Processing Systems 引用量&#xff1a;22 这篇论文探讨了模块化架构在机…

信号处理-探索相邻数据点之间的变化和关联性的操作方法

当前值减去前一个值&#xff0c;乘上当前值与前一个值差值的绝对值 当前值减去后一个值&#xff0c;乘上当前值与后一个值差值的绝对值。 意义何在&#xff1f; 当前值减去前一个值&#xff1a;表示当前数据点与前一个数据点之间的变化量。当前值与前一个值差值的绝对值&…

Vue.js环境变量:灵活调整,助您轻松应对各种开发需求

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; Vue.js环境变量&#xff1a;灵活调整&#xff0c;助您轻松应对各种开发需求 一、引言 …