- 积分
 - 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)
 
  
  复制代码 
 
 |   
 
 
 
 |