- 积分
- 998
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-8-23
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 chiqu296 于 2019-12-30 21:27 编辑
之前发过Basemap下画站点数据的帖子,现在转到Cartopy下,所以重新写了一个,白化使用平流层的萝卜的Python完美白化,只是在投影转换那里稍作了改动。- import os
- import maskout
- import numpy as np
- import xarray as xr
- from scipy.interpolate import Rbf
- import matplotlib as mpl
- import matplotlib.pyplot as plt
- import cartopy.crs as ccrs
- import cartopy.feature as cfeature
- from cartopy.io.shapereader import Reader
- SHP = './shapefile/china_shp'
- # 数据处理
- ds = xr.open_dataset('./r160.nc')
- da = ds.PRE.sel(month=slice(6, 8)).mean(dim='month').mean(dim='year')
- # 插值
- olon = np.linspace(72, 137, 260)
- olat = np.linspace(15, 55, 120)
- olon, olat = np.meshgrid(olon, olat)
- func = Rbf(ds.station_lon, ds.station_lat, da, function='linear')
- pre_grid = func(olon, olat)
- # 字体
- mpl.rcParams['font.sans-serif'] = ['Times New Roman']
- mpl.rc('font', size=15, weight='normal')
- font = {'family': 'NSimSun','weight': 'normal','size': 15}
- # 颜色
- levels = [0, 0.1, 10, 25, 50, 100, 250, 500]
- cmaps = mpl.colors.ListedColormap(['#FFFFFF', '#A9F18D', '#3DB93D', '#60B8FF', '#0001E2', '#F900FA', '#810045'])
- norm = mpl.colors.BoundaryNorm(levels, 7)
- # 画图
- proj = ccrs.LambertConformal(central_latitude=90, central_longitude=105)
- fig, ax = plt.subplots(figsize=(15, 15), subplot_kw=dict(projection=proj))
- ax.set_extent([80, 130, 13, 55], ccrs.PlateCarree())
- ax.gridlines(linestyle='--')
- ax.add_feature(cfeature.OCEAN.with_scale('50m'))
- ax.add_feature(cfeature.LAND.with_scale('50m'))
- ax.add_feature(cfeature.RIVERS.with_scale('50m'))
- ax.add_feature(cfeature.LAKES.with_scale('50m'))
- ax.add_geometries(Reader(os.path.join(SHP, 'cnhimap.shp')).geometries(),ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=1)
- cf = ax.contourf(olon,olat,pre_grid,levels=levels,cmap=cmaps,norm=norm,zorder=0,transform=ccrs.PlateCarree())
- ax.scatter(ds.station_lon,ds.station_lat,c='k',s=10,marker='o',transform=ccrs.PlateCarree())
- cbar = fig.colorbar(cf,ax=ax,orientation="vertical",aspect=25,pad=0.01,shrink=0.7)
- cbar.set_label('毫米', fontdict=font)
- cbar.set_ticklabels(levels)
- ax.set_title('多年平均夏季降水', fontdict=font)
复制代码
|
|