CNN处理气象栅格数据1_确定数据集的范围

需求:  尝试将CNN用于气象数据的分析中,因此打算构建一个基于中国边界的格子数据集,格子大小0.01,约为1km.

经过一些实践,得到绘制中国地图较优的经纬度范围,[72.5, 136.25, 3, 54.5]

为了减少研究区域,将纬度的下界设置为18, 得到:

由于MERRA2数据的分辨率0.5*0.625, 故下载数据时候的边界应为: (72.5, 136.25, 18, 54.5),即初步想法构成一个6376*3651的矩阵.

画图用到cartopy库,以及中国的边界文件china_country(注意边界文件包括.shp,.shx和.dbf三个文件).

import numpy as np
import pandas as pd
import matplotlib.cm as cm
# from mpl_toolkits.basemap import Basemap
# from netCDF4 import Dataset
import matplotlib.pyplot as plt
import netCDF4 as nc
import cartopy.feature as cfeature
import cartopy.io.shapereader as shpreader
import cartopy.crs as ccrs

# 粗略的估计研究的范围
a = np.arange(72.5, 136.26, 0.1)  # 此处为了画图方便,将格子的大小控制为0.1
b = np.arange(18, 54.6, 0.1)
x, y = np.meshgrid(a, b)
test_data = np.ones(x.shape)


# 设置图像中的字体
plt.rcParams['font.family'] = 'Arial'
plt.rcParams['font.size'] = 10
plt.rcParams['font.weight'] = 'bold'


# 添加中国的海岸线
china = shpreader.Reader('../Dataset2015/china_country.shp').geometries()
proj = ccrs.PlateCarree()
fig = plt.figure(figsize=(6, 4.5))
ax = fig.add_subplot(1, 1 , 1, projection=proj)
ax.add_feature(cfeature.COASTLINE.with_scale('50m'), linewidth=1)     # 添加海岸线
ax.add_geometries(china, ccrs.PlateCarree(), facecolor='none', edgecolor='k', linewidth=1, zorder=1) # 添加中国边界


import matplotlib as mpl
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
# 自定义颜色条、色阶
cmap = mpl.cm.RdBu
newcolors=cmap(np.linspace(0, 1, 256))
newcmp = ListedColormap(newcolors[30:226])

# 绘制制定区域内的浓度图像
cf = ax.contourf(x, y, test_data, levels=50, cmap=newcmp, 
                 transform=proj, extend='both') 
# cb = fig.colorbar(cf, shrink=0.7, orientation='vertical', pad=0.15)  # 设置颜色条的位置和标签
# cb.ax.set_xlabel('T2M(kg/$cm^2$)', fontweight='bold')
# cb.ax.tick_params(which='major', direction='in', length=3)

# 添加小格子
gl = ax.gridlines(alpha=0.8, linestyle='--', draw_labels=True, 
                   dms=True, x_inline=False, y_inline=False)
gl.right_labels = 0
gl.top_labels = 0

# 添加中国的南海群岛
ax_sub = fig.add_axes([0.78,0.207,0.12,0.2], projection=proj)  # [*left*, *bottom*, *width*,*height*] # add_axes函数中的rect参数,前两个变量为子图的位置,后两个变量为子图的大小 
ax_sub.set_extent([105,125,0,25], crs=ccrs.PlateCarree())   # 设置子图的经纬度范围
ax_sub.add_feature(cfeature.COASTLINE.with_scale('50m'))    # 添加子图的海岸线
china2 = shpreader.Reader('../Dataset2015/china_country.shp').geometries()
ax_sub.add_geometries(china2, ccrs.PlateCarree(), facecolor='none', edgecolor='r', linewidth=1, zorder=1)

参考文章: Python+Cartopy绘制中国地图

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值