- 积分
- 1268
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2019-11-17
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2020-8-13 22:46:21
|
显示全部楼层
import xarray as xr
import maskout2
import os
import cartopy.crs as ccrs
import cartopy.feature as cfeat
import matplotlib.colors as mcolors
from cartopy.io.shapereader import Reader
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import matplotlib.pyplot as plt
#引入shp文件路径
SHP='./shapefile/china0'
# 数据读取
ds = xr.open_dataset(r'C:\Users\Administrator\Desktop\17\pr_Amon_FGOALS-f3-L_ssp126_r1i1p1f1_gr_201501-210012.nc')
pr = ds['pr']
#取一段时间内的降水作为绘图的数据源
pr_0=pr[793:1032]
pr_ave=pr_0.mean(dim='time')*86400*30*12
lon=ds.lon
lat=ds.lat
lon_range=lon[(lon>73)&(lon<136)]
lat_range=lat[(lat>3)&(lat<54)]
pr_region=pr_ave.sel(lon=lon_range,lat=lat_range)
# 创建画图空间
#投影
proj = ccrs.PlateCarree()
#创建页面
fig = plt.figure(figsize=(16,10))
#子图
ax = fig.subplots(1, 1, subplot_kw={'projection': proj})
# 设置地图属性:加载国界、海岸线
ax.add_feature(cfeat.BORDERS.with_scale('50m'),
linewidth=0.8, zorder=1)
ax.add_feature(cfeat.COASTLINE.with_scale('50m'),
linewidth=0.6, zorder=1)
# 设置网格点属性
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True,
linewidth=1.2, color='k', alpha=0.5, linestyle='--')
gl.top_labels = False #关闭顶端标签
gl.right_labels = False #关闭右侧标签
gl.xlabel_style={'size':12,'color':'red'}
gl.ylabel_style={'size':12,'color':'blue'}
gl.xlines=False
gl.ylines=False
gl.xformatter = LONGITUDE_FORMATTER #x轴设为经度格式
gl.yformatter = LATITUDE_FORMATTER #y轴设为纬度格式
plt.rcParams['font.sans-serif']=['SimHei']#显示中文字
# 设置colorbar
colorlevel=[0.1,10.0,25.0,50.0,100.0,250.0,500.0]#雨量等级
colordict=['#A6F28F','#3DBA3D','#61BBFF','#0000FF',
'#FA00FA','#800040']#颜色列表
rain_map=mcolors.ListedColormap(colordict)#产生颜色映射
norm=mcolors.BoundaryNorm(colorlevel,rain_map.N)#生成索引
# 画图
ax.set_title('2080-2100年均降水总量',fontsize=20,loc='left')#标题
#等值线
cs=pr_region.plot.contourf(ax=ax, levels=colorlevel,
cmap=rain_map,
norm=norm,
transform=ccrs.PlateCarree(),
extend='both')
#添加省份边界
ax.add_geometries(Reader(os.path.join(SHP,'bou2_4l.shp')).geometries(),
ccrs.PlateCarree(),
facecolor='none',
edgecolor='k',
linewidth=1)
#白化
clip=maskout2.shp2clip(cs,ax,r'C:\Users\Administrator\Desktop\17\shapefile\china0\china0.shp')
#显示图像
fig.show() |
|