- 积分
- 616
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2017-7-11
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 wxj96 于 2019-10-31 10:55 编辑
最近需要画北半球的图,基于Python的Cartopy地图库,画北半球极射赤面投影。找了很多都没有相关的经验分享,准备自己写一个。
用到cartopy库的两个坐标函数,Orthographic和PlateCarree。Orthographic用于画底图,PlateCarree表示数据本身的投影方法。几乎所有的气象数据都是格点或者站点数据,基本都符合PlateCarree坐标。开始以为transform表示转化到某个投影,其实transform表示数据本身符合哪种投影,转化到地图投影上。
具体代码如下- import matplotlib.pyplot as plt
- import matplotlib as mpl
- import cartopy.crs as ccrs
- import cartopy.feature as cfeature
- from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
- from netCDF4 import Dataset
- import numpy as np
- def make_map(ax):
- projection = ccrs.Orthographic(central_longitude=-90,central_latitude=90)
- ax.set_global()
- ax.coastlines(linewidth=0.5)
- '''标注坐标轴'''
- # ax.set_xticks(np.linspace(-180, 180, 1), crs=projection)
- # ax.set_yticks(np.linspace(-90, 90,5), crs=projection)
- '''zero_direction_label=True 有度的标识,False则去掉'''
- lon_formatter = LongitudeFormatter(zero_direction_label=True)
- lat_formatter = LatitudeFormatter()
- # ax.xaxis.set_major_formatter(lon_formatter)
- # ax.yaxis.set_major_formatter(lat_formatter)
- '''添加网格线'''
- #gl = ax.gridlines()
- #ax.grid()
- return ax
- data = Dataset('hgt500_correlation_mon_mean.nc')
- hgt = data.variables['correlation'][:,:,:,:]
- lat = data.variables['lat'][:]
- lon = data.variables['lon'][:]
- data_proj = ccrs.PlateCarree(central_longitude=0)
- fig = plt.figure()
- proj = ccrs.Orthographic(central_longitude=-90,central_latitude=90)
- ax = fig.add_subplot(projection = proj)
- ax = make_map(ax)
- ax.gridlines(color='gray', linestyle='--', xlocs = np.arange(0,390,20), ylocs = np.linspace(-80,80,9))
- cf = ax.contour(lon, lat, hgt[0,0,:,:], colors='k',transform=data_proj)
- plt.clabel(cf,fmt = '%5.2f')
- plt.show()
复制代码
|
评分
-
查看全部评分
|