# 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用于调整箭头大小及比例,没有固定数值,需要手动调参到合适情况
![2020年夏季500hPa位势高度场(等值线)和距平场(阴影区)及850hPa风场距平(箭头).png](D:\mywork\MeteorologicalPy\images\2020年夏季500hPa位势高度场(等值线)和距平场(阴影区)及850hPa风场距平(箭头).png)
没有合适的资源?快使用搜索试试~ 我知道了~
基于python\numpy\pandas\xarray\matplotlib的气象数据处理、程序设程序设计及绘图
共23个文件
py:8个
xml:5个
md:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 90 浏览量
2024-09-16
12:12:37
上传
评论
收藏 320KB ZIP 举报
温馨提示
【作品名称】:基于python\numpy\pandas\xarray\matplotlib\cartopy\metpy的气象数据处理、程序设 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。
资源推荐
资源详情
资源评论
收起资源包目录
MeteorologicalPy-main.zip (23个子文件)
MeteorologicalPy-main
.DS_Store 6KB
readfiles
Text.py 710B
readme.md 4KB
CsvAndExcel.py 363B
.gitattributes 66B
xarray1
read.py 118B
calculate.py 316B
readme.md 4KB
operate.py 678B
.idea
other.xml 193B
vcs.xml 180B
misc.xml 288B
inspectionProfiles
profiles_settings.xml 174B
modules.xml 284B
.gitignore 38B
MeteorologicalPy.iml 398B
cartopy1
create_map.py 1KB
work2.py 3KB
work1.py 499B
readme.md 5KB
__pycache__
create_map.cpython-38.pyc 1KB
images
2020年夏季500hPa位势高度场(等值线)和距平场(阴影区)及850hPa风场距平(箭头).png 295KB
README.md 1KB
共 23 条
- 1
资源评论
小英子架构
- 粉丝: 1010
- 资源: 4041
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功