提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
在学习了气象家园平流层的萝卜首发、晋陵小生优化的 maskout 模块白化功能之后。利用九大流域的shp文件,我对九大流域中黄河流域的降水分布进行了绘制。
一、使用maskout程序包的要点?
maskout是比较python+cartopy实现白化功能的一个比较好用的子程序。(1)在应用的过程中要注意相关的shp文件应该是地理坐标系,如果不是的话要转化坐标系。(详情参考:如何使用arcmap转换shp文件坐标系)(2)注意选择合适的region,尽量选择具有代表性的record。
相应的maskout_hhriver里应该修改为下图所示:
二、使用步骤
1.引入库
代码如下(示例):
import os
import shapefile as shp
SHP = r'F:\mapshp\china_shp'
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import xarray as xr
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.io.shapereader import Reader
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import numpy
import pandas as pd
import mask_hhriver
#设定新字体
2.绘制黄河流域降水分布图
代码如下(示例):
#设定新字体
from matplotlib.font_manager import FontProperties
lpfont = matplotlib.font_manager.FontProperties(fname='F:\python可视化\font\SimSun.ttf')
plt.rcParams.update({'font.size':16})
region=[95,120,32,42]
df=xr.open_dataset(r'E:\testdataset\precip.mon.mean.nc')
lat = df.lat
lon = df.lon
# lat = df['lat']
# lon = df['lon']
pre0 = df['precip'] #含缺测值
pre1 = np.array(pre0)
pre_clim=np.nanmean(pre1,axis=0)
fig=plt.figure(dpi=600,figsize=(12,6))
proj=ccrs.PlateCarree()
ax = plt.axes(projection = proj)
ax.set_extent(region, crs = proj)
ax.set_xticks(np.arange(region[0], region[1] + 1, 5), crs = proj)
ax.set_yticks(np.arange(region[-2], region[-1] + 1, 2), crs = proj)
ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label=False))
ax.yaxis.set_major_formatter(LatitudeFormatter())
# Add 黄河流域&干流shp
c11=ax.contourf(lon,lat,pre_clim,np.arange(0,3,0.01),extend='both',transform=ccrs.PlateCarree(),cmap='gist_rainbow')
ax.add_geometries(Reader(r'F:/mapshp/hhriver/jichu/黄河干流epsg4324.shp').geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.5)
clip=mask_hhriver.shp2clip(c11,ax,shpfile=os.path.join(SHP, 'China_nine_basinepsg4324.shp'),region=['Yellow River Basin'],proj= proj)
cbar=plt.colorbar(c11,shrink=0.75,aspect=20,fraction=.03,pad=0.02) #aspect控制bar宽度,fraction控制大小比例,pad控制与图的距离
cbar.set_ticks(np.arange(0,3,0.3)) #设置colorbar范围和刻度标记间隔
cbar.ax.tick_params(labelsize=12, direction='in', right=False)
#出图
plt.savefig('prehh.png',dpi=600)
plt.show()
总结
最后还可以对图片进行润色,例如添加标题等等。参考气象水文科研猫发布的Python可视化中国区域地面气象要素驱动数据集—以黄河流域为例。基本实现了黄河流域的白化功能。
j