python | cartopy,一个有趣的 Python 库!

本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。

原文链接:cartopy,一个有趣的 Python 库!

大家好,今天为大家分享一个有趣的 Python 库 - cartopy。

Github地址:https://github.com/SciTools/cartopy

在地理数据的可视化和空间分析中,Cartopy 是一个强大的 Python 库,专门用于处理和绘制地图及地理信息。它基于 Matplotlib 提供丰富的地理投影、轮廓图、等高线图等功能,广泛应用于气象学、地球科学、海洋学和其他与地理空间数据相关的领域。Cartopy 支持各种地图投影和坐标变换,能够轻松地将地理数据可视化,使研究人员和开发者能够对复杂的地理数据进行深入分析。

安装

Cartopy 的安装稍微复杂一些,因为它依赖于多个底层库,如 GEOSPROJShapely

推荐使用 conda 进行安装,以确保所有依赖正确安装:

conda install -c conda-forge cartopy

如果使用的是 pip,则可以尝试以下命令进行安装,但可能需要手动安装一些依赖项:

pip install cartopy

安装完成后,确保 Matplotlib 也已安装,因为 Cartopy 依赖它来绘制图形。

特性

  1. 多种地图投影:支持多种地图投影,如等经纬线投影(PlateCarree)、墨卡托投影、北极/南极投影等。

  2. 灵活的地理绘图:能够绘制大陆、湖泊、河流、海岸线等地理特征。

  3. 坐标变换:支持在不同的地图投影间进行坐标变换,确保地理数据的正确显示。

  4. 绘制地理数据:支持绘制矢量数据、栅格数据,如地理信息系统(GIS)文件和气象数据(如风场、等温线)。

  5. 与 Matplotlib 无缝集成:可以与 Matplotlib 配合使用,充分利用 Matplotlib 的绘图功能进行地理数据的展示。

基本功能

1. 创建基本地图

使用 Cartopy,可以轻松创建一个基本的地图,并添加海岸线、国家边界等地理特征。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# 创建地图并使用 PlateCarree 投影
fig = plt.figure(figsize=(8, 6))
ax = plt.axes(projection=ccrs.PlateCarree())

# 添加海岸线
ax.coastlines()

# 设置标题
plt.title('基础地图示例')
plt.show()

在这个示例中,使用了 PlateCarree 投影来绘制一个简单的世界地图,并添加了海岸线。通过 Cartopy,可以快速生成带有地理特征的基本地图。

2. 绘制国家边界和河流

除了海岸线之外,Cartopy 还支持绘制国家边界、河流、湖泊等地理特征。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# 创建地图并使用 Robinson 投影
fig = plt.figure(figsize=(8, 6))
ax = plt.axes(projection=ccrs.Robinson())

# 添加地理特征
ax.coastlines()
ax.add_feature(cartopy.feature.BORDERS, linestyle=':')
ax.add_feature(cartopy.feature.RIVERS)

# 设置标题
plt.title('带有边界和河流的地图')
plt.show()

在这个示例中,使用了 Robinson 投影,并添加了国家边界和河流。Cartopy 内置了多个地理特征,可以通过 cartopy.feature 轻松添加到地图上。

3. 坐标网格

Cartopy 支持在地图上添加经纬度网格,以便更好地展示地理信息。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# 创建地图并使用 PlateCarree 投影
fig = plt.figure(figsize=(8, 6))
ax = plt.axes(projection=ccrs.PlateCarree())

# 添加海岸线
ax.coastlines()

# 添加经纬度网格
ax.gridlines(draw_labels=True)

# 设置标题
plt.title('带有坐标网格的地图')
plt.show()

这个示例展示了如何在地图上绘制经纬度网格,并且显示网格标签(即经纬度坐标)。

高级功能

1. 坐标变换和地图投影

Cartopy 提供了对不同投影之间进行坐标变换的能力,这在需要展示不同地理区域或进行精确测量时非常重要。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# 创建地图并使用北极投影
fig = plt.figure(figsize=(8, 8))
ax = plt.axes(projection=ccrs.NorthPolarStereo())

# 添加海岸线
ax.coastlines()

# 设置标题
plt.title('北极投影地图')
plt.show()

在这个示例中,使用了 NorthPolarStereo 投影,绘制了一个以北极为中心的地图。

2. 绘制等高线图

Cartopy 支持在地图上绘制等高线图和等值线图,这对于展示气象或地形数据非常有用。

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# 生成模拟数据
lon = np.linspace(-180, 180, 181)
lat = np.linspace(-90, 90, 91)
lon2d, lat2d = np.meshgrid(lon, lat)
data = np.sin(np.radians(lat2d)) * np.cos(np.radians(lon2d))

# 创建地图
fig = plt.figure(figsize=(10, 5))
ax = plt.axes(projection=ccrs.PlateCarree())

# 添加海岸线
ax.coastlines()

# 绘制等高线
cs = ax.contour(lon, lat, data, levels=10, colors='k')
ax.clabel(cs, inline=1, fontsize=10)

# 设置标题
plt.title('等高线图示例')
plt.show()

这个示例展示了如何生成模拟的地理数据并绘制等高线图,能够有效地展示地形变化或气象数据。

3. 使用矢量数据

Cartopy 可以处理矢量数据文件,如 GeoJSON、Shapefile 等。可以通过 cartopy.io.shapereader 读取并展示这些矢量数据。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader

# 创建地图
fig = plt.figure(figsize=(8, 6))
ax = plt.axes(projection=ccrs.PlateCarree())

# 添加海岸线
ax.coastlines()

# 读取 Shapefile 数据
shapefile = shpreader.natural_earth(resolution='110m', category='cultural', name='admin_0_countries')
reader = shpreader.Reader(shapefile)

# 绘制国家边界
for record in reader.records():
    ax.add_geometries([record.geometry], ccrs.PlateCarree(), edgecolor='black')

# 设置标题
plt.title('Shapefile 数据绘制示例')
plt.show()

通过这个示例,可以加载并绘制 Shapefile 数据,展示全球国家边界。

总结

Python Cartopy 是一个功能强大的地理数据可视化工具,广泛应用于气象学、地球科学、航空航天、海洋学和地理信息系统等多个领域。它基于 Matplotlib 提供丰富的地理投影、轮廓图和数据展示功能,帮助开发者轻松地处理复杂的地理数据。

THE END !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值