本节提要:关于一些地图操作
首先必须要说一下,添加地图的操作,各人有各人的做法,你觉得你的好,我觉得我的好。我这里只提供一种我比较常用的办法。 我是比较少的使用subplot(或类似)这种添加方式的,而更偏爱fig.add_axes( )这种,因为可能我自学的时候走岔了路,喜欢画些稀奇古怪的图,所以我完全膺服摸鱼咯大佬推荐的这种方式,因为可以完全自己调节子图位置,比如:
import matplotlib.pyplot as pltimport numpy as npimport cartopy.crs as ccrsimport cartopy.feature as cfeatfrom cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatterfrom cartopy.io.shapereader import Readerimport xarray as xrplt.rcParams['font.sans-serif']=['SimHei']#正常显示中文proj= ccrs.PlateCarree()#缩写投影extent=[75,135,5,55]#绘图范围reader = Reader( r'D:\python\Province_9\Province_9.shp')###########################################################################def create_map(ax,b):#封装绘图函数 ax.add_feature(cfeat.COASTLINE.with_scale('50m'),lw=0.6) ax.add_feature(cfeat.LAKES.with_scale('50m')) ax.add_feature(cfeat.RIVERS.with_scale('50m'),lw=0.5) provinces = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='k', facecolor='none',alpha=0.75) ax.add_feature(provinces, linewidth=0.4) ax.set_xticks(np.arange(extent[0], extent[1]+10, 10)) ax.set_yticks(np.arange(extent[2], extent[3]+10, 10)) ax.xaxis.set_major_formatter(LongitudeFormatter()) ax.yaxis.set_major_formatter(LatitudeFormatter()) ax.tick_params(axis='both',labelsize=6,direction='in',right=True,top=True) ax.grid(linewidth=0.6, color='k', alpha=0.45, linestyle='--') ax.set_extent(extent,crs=proj) a2=fig.add_axes([(b[0]+0.348),(b[1]+0.038),b[2]*0.25,b[3]*0.25],projection=proj) a2.add_feature(provinces, linewidth=0.3) a2.set_extent([105,125,0,25]) a2.text(110,27,'中国南海',fontsize=5) return ax,a2fig=plt.figure(figsize=(6,6),dpi=900)ax1=fig.add_axes([0,0.01,0.45,0.45],projection=proj)ax2=fig.add_axes([0,0.5,0.45,0.45],projection=proj)ax3=fig.add_axes([0.5,0.01,0.45,0.45],projection=proj)ax4=fig.add_axes([0.5,0.5,0.45,0.45],projection=proj)create_map(ax1,[0,0.01,0.45,0.45])create_map(ax2,[0,0.5,0.45,0.45])create_map(ax3,[0.5,0.01,0.45,0.45])create_map(ax4,[0.5,0.5,0.45,0.45])