# Cartopy的应用
### 引用的库
```python
import numpy as np
import xarray as xr
import matplotlib
from matplotlib import pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeat
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
np.set_printoptions(suppress=True) # 关闭科学计数法
matplotlib.rc("font", family='MicroSoft YaHei', weight='bold', size=12) # 设置中文
```
### 创建地图
```python
def creatmap():
proj = ccrs.PlateCarree() # 创建投影
fig = plt.figure(figsize=(15, 8), dpi=80) # 创建页面
ax = fig.subplots(1, 1, subplot_kw={'projection': proj}) # 子图
# 设置地图属性
# ax.add_feature(cfeat.RIVERS.with_scale('50m'), zorder=1) # rivers
# ax.add_feature(cfeat.LAKES.with_scale('50m'), zorder=1) # lakers
ax.add_feature(cfeat.BORDERS.with_scale('50m'), linewidth=1, zorder=1) # 国界
ax.add_feature(cfeat.COASTLINE.with_scale('50m'), linewidth=1, zorder=1) # 海岸线
# 设置网格点属性
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True,
linewidth=0.8, color='k', alpha=0.5, linestyle='--')
gl.toplabels_top = False # 关闭顶端标签
gl.rightlabels_right = False # 关闭右侧标签
gl.xformatter = LONGITUDE_FORMATTER # x轴设为经度格式
gl.yformatter = LATITUDE_FORMATTER # y轴设为纬度格式
return fig, ax
```
> 可以单独设置一个文件,如create_map.py以后其他文件需要画图时直接import这个文件,如work1.py示例
```python
from cartopy1.create_map import *
# 建立地图
fig,ax= creatmap()
```
> 如果没出图,尝试以下设置步骤:File ——> Settings ——> Tools ——> Python Scientific ——> 取消勾选 Show plots in toolwindow
- 使用地图时,某些地图属性不要使用时可以在creatmap()函数中将其注释掉
- 其他类型的地图投影可以自行去官方文档查看
### 进行第一次绘图测试
运用xarray1文件中的示例及数据,在work1.py文件中进行绘图测试
```python
# 按时间计算平均值
airmean = air.sel(time=slice('1961-01-01','1990-12-01')).mean(dim='time')
# 绘图
airmean.sel(level=925).plot.contourf(ax=ax,levels=np.arange(-45, 46, 1),cmap='coolwarm',#Spectral_r
transform=ccrs.PlateCarree())
```
绘图语句中:
- airmean 为xarray的DataArray或DataSet类型数据集
- sel(level=925) 是取925hPa
- .plot.contourf 是基于matpllib的绘图函数 contourf是填色图 contour是等高线图
- ax=ax 是在设置的地图画图上绘图,一般不用更改
- levels 绘图数值范围,此处设置-45℃~45℃,(步长为1可省略),类似list类型的序列可以作为参数
- cmap 是填色图的色标选择 常用coolwarm,Spectral_r(加_r是色标反向),其他类型查看[文档](https://matplotlib.org/2.0.2/users/colormaps.html)
- transform=ccrs.PlateCarree() 对应地图的投影类型,一般不用更改
### 绘图:高度场、距平场、风场综合
如work2.py示例,数据同样来源于[NCEP-DOE Reanalysis 2: Pressure Level](https://psl.noaa.gov/data/gridded/data.ncep.reanalysis2.pressure.html)
```python
# 创建地图
fig, ax = creatmap()
# 设置绘图范围
img_extent = [30, 150, 0, 70]
ax.set_extent(img_extent, crs=ccrs.PlateCarree())
lon, lat = file.lon, file.lat
# 色标信息
cbar_kwargs = cbar_kwargs = {
'orientation': 'horizontal', # 水平
'label': '高度场距平 单位: gpm',
'shrink': 0.5, # 缩小
}
# 高度场距平
(hgt - hgtmean).plot.contourf(levels=np.arange(-40, 60, 5), ax=ax, cmap='coolwarm', cbar_kwargs=cbar_kwargs,
transform=ccrs.PlateCarree())
# 高度场等高线
h = hgt.plot.contour(levels=np.arange(4880, 5960, 20), ax=ax, linewidths=1.2, colors='black',
transform=ccrs.PlateCarree())
# 等值线上的数值信息
plt.clabel(h, inline=1, fontsize=10, fmt='%1.0f', colors='black')
# 风场
ax.quiver(lon, lat, (u - umean), (v - vmean), transform=ccrs.PlateCarree(), width=0.0025, scale=200, color='g')
# 标题
plt.title('2020年夏季500hPa位势高度场(等值线)和距平场(阴影区)及850hPa风场距平(箭头)')
plt.savefig('../images/2020年夏季500hPa位势高度场(等值线)和距平场(阴影区)及850hPa风场距平(箭头).png')
```
#### 需要注意的:
- 由于出现了 ax.quiver 这个文件必须要def createmap() 不然会出现bug,可能是由于变量的作用范围引起的问题
- 由于图层覆盖,一般先画填色,再画等值线和风场
- 色标信息不需要调整时用默认的可以在contourf中不写
- 每个函数的颜色属性名不一样,如contourf对应cmap,contourd和clabel对应colors,quiver对应color
- quiver 需要四个参数:前两个是经纬度信息,一般直接引用nc文件的;后两个分别为u,v分量
- quiver width,scale用于调整箭头大小及比例,没有固定数值,需要手动调参到合适情况
和距平场(阴影区)及850hPa风场距平(箭头).png)

小英子架构
- 粉丝: 1042
- 资源: 4193
最新资源
- 中风风险预测数据集(70K记录,18特征)CSV
- 2024 年电子游戏销售数据集( 64,000 款游戏,14特征)CSV
- 龙珠数据集(用于问答项目,13K+文件)TXT
- 美国住房数据集(300 行 10 列房地产相关数据)CSV
- 每日食品与营养数据集( 1000 个独特用户的 10000 条食物摄入量数据记录,14特征)CSV
- 基于MATLAB的智能抠图系统:GUI界面与两万字详解文档,基于MATLAB的智能抠图系统:GUI界面与两万字详解文档,基于MATLAB的抠图系统+GUI界面+两万字文档 本程序利用基于学习的抠图方法
- 视觉识别windows程序
- FactoryIO液位PID仿真程序入门指南:使用TIA Portal V15与FactoryIO 2.4.0的梯形图编程实践,FactoryIO液位PID仿真程序:西门子TIA Portal V15
- filezilla服务器和客户端安装包,用于做文件传输测试等
- 内外网DeepSeek部署实战:基于Ollama的多客户端集成与安全强化方案
- PPTFancyScrollView
- Matlab遗传算法实现无人机协同任务分配方案优化:最小代价下的高效路径选择与时间分配策略,基于遗传算法优化无人机任务分配方案:航程与耗时双重考量,matlab:基于遗传算法的多无人机协同任务分配
- 基于西门子PLC与组态王技术,设计八层电梯电气控制系统:智能控制界面与组态画面动画实现,基于西门子PLC与组态王画面的八层电梯电气控制系统设计与动画展示,76#基于西门子plc和组态王八层电梯控制8层
- 内网AI知识库构建:DeepSeek离线部署全攻略,涵盖国产化适配与安全加固
- 基于MATLAB的模拟退火算法优化车辆路径问题的研究:位置定位下的最短路径选择及运输成本最低方案,基于Matlab的模拟退火算法优化VRP路径规划系统:最短路径与成本最低的车辆调度方案,基于matla
- 《互联网时代的项目管理》读书分享PPT
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


