数据连接:使用 cartopy0.17 及以下版本进行兰勃脱投影作图,会出现以下的经、纬度标识
问题,cartopy0.18 及以上版本可完美解决兰勃脱投影经纬度标记问题:
PlateCarree (无坐标转换)作图:
'''Copyright 2020'''
import numpy as npimport matplotlib.pyplot as pltimport
matplotlib.ticker as mtickerimport xarray as xrimport maskoutimport
cartopy.crs as ccrsimport cartopy.feature as cfeaturefrom
cartopy.io.shapereader import Readerfrom cartopy.mpl.ticker import
LongitudeFormatter, LatitudeFormatterfrom matplotlib import
rcParamsconfig = {"font.family":'Times New Roman', "font.size": 12,
"mathtext.fontset":'stix'}rcParams.update(config)region=[70, 140, 15,
55]df= xr.open_dataset(r'F:/Rpython/lp27/data/vwnd.mon.ltm.nc')lat0 =
df['lat'] lon0 = df['lon'] z = df['vwnd'][6,2,::] #
取
8
月、
500hPa
等,
时次
,
层
,
经度
,
纬度
#scale='10m'fig=plt.figure(dpi = 600, figsize = (12,
6))proj=ccrs.PlateCarree()ax = plt.axes(projection =
proj)ax.set_extent(region, crs = proj)#ax.coastlines(scale, linewidth =
0.5)ax.set_xticks(np.arange(region[0], region[1] + 1, 10), crs =
proj)ax.set_yticks(np.arange(region[-2], region[-1] + 1, 10), crs =
proj)ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_lab
el=False))ax.yaxis.set_major_formatter(LatitudeFormatter())# Add ocean,
land, rivers and lakes#ax.add_feature(cfeature.COASTLINE,lw=0.3)
ax.add_feature(cfeature.OCEAN.with_scale('50m'))ax.add_feature(cfeature
.LAND.with_scale('50m'))ax.add_feature(cfeature.LAKES.with_scale('50m')
)ax.add_geometries(Reader(r'F:/Rpython/lp27/data/river1.shp').geometrie
s(),ccrs.PlateCarree(),facecolor='none',edgecolor='b',linewidth=0.2)ax.
add_geometries(Reader(r'F:/Rpython/lp27/data/china1.shp').geometries(),
ccrs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)ax.add_
geometries(Reader(r'F:/Rpython/lp27/data/china2.shp').geometries(),ccrs
.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.1)ax.add_geom
etries(Reader(r'F:/Rpython/lp27/data/ne_10m_land.shp').geometries(),ccr
s.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)ax.add_geo
metries(Reader(r'F:/Rpython/lp27/data/ne_50m_lakes.shp').geometries(),c
crs.PlateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)lon_rang
e1=lon0[(lon0>60)&(lon0<150)]lat_range1=lat0[(lat0>0)&(lat0<60)]z1=z.se
l(lon=lon_range1,lat=lat_range1)lon1,lat1=np.meshgrid(lon_range1,lat_ra
nge1)z1=z1.datac11=ax.contourf(lon1,lat1,z1,np.arange(-
6,6.01,0.5),extend='both',transform=ccrs.PlateCarree(),cmap='gist_rainb
ow')clip=maskout31.shp2clip(c11,ax,'F:/Rpython/lp27/data/china0')cbar=p
lt.colorbar(c11,shrink=0.99,aspect=20,fraction=.03,pad=0.01) #aspect
控制
bar
宽度,
fraction
控制大小比例
,pad
控制与图的距离
cbar.set_ticks(np.arange(-5,5.001,1)) #
设置
colorbar
范围和刻度
标记间隔
cbar.ax.tick_params(labelsize=12, direction='in',
right=False)ax.set_title('NCEP 再分析 1981-2010 年 7 月平均 850hPa 经向风速.
单位:m.s$^{-1}$',{'family':'simhei','size':14,'color':'k'}) ax0 =
plt.gca() #
获取边框
ax0.outline_patch.set_linewidth(0.5) #
修改边框粗
细
#
添加南海,实际上就是新建一个子图覆盖在之前子图的右下角
ax2 =
fig.add_axes([0.7365, 0.11, 0.2,
0.2],projection=proj)ax2.set_extent([105.8,
122,0,25])ax2.add_feature(cfeature.OCEAN.with_scale('50m'))ax2.add_geom
etries(Reader(r'F:/Rpython/lp27/data/china1.shp').geometries(),ccrs.Pla
teCarree(),facecolor='none',edgecolor='k',linewidth=0.2)ax2.add_geometr
ies(Reader(r'F:/Rpython/lp27/data/ne_10m_land.shp').geometries(),ccrs.P
lateCarree(),facecolor='none',edgecolor='k',linewidth=0.2)lon_range2=lo
n0[(lon0>=105)&(lon0<=125)]lat_range2=lat0[(lat0>=0)&(lat0<=25)]z2=z.se
l(lon=lon_range2,lat=lat_range2)lon2,lat2=np.meshgrid(lon_range2,lat_ra
nge2)z2=z2.datac21=ax2.contourf(lon2,lat2,z2,np.arange(-
6,6.01,0.5),extend='both',transform=ccrs.PlateCarree(),cmap='gist_rainb
ow')clip=maskout.shp2clip(c21,ax2,'F:/Rpython/lp27/data/china0')ax0 =
plt.gca() #
获取边框
ax0.outline_patch.set_linewidth(0.5) #
修改边框粗
细
#
保存图片
plt.savefig(r"F:/Rpython/lp27/plot70.4.png",dpi=600)plt.show()