本节提要:在cartopy下裁剪地图边界的形状
一、圆形边界的裁剪
该节内容基于cartopy官网绘图实例
Custom Boundary Shape,可以将方形的标准边框样式裁剪为圆形。
在cartopy中裁剪边界实际上是通过GeoAxes下的set_boundary命令进行的,裁剪的依据即是编程者传入的Path(路径),该命令按照Path中存储的路径点逐一连接,形成新的边框。
首先导入可能需要的库包:
import numpy as npimport matplotlib.pyplot as pltimport cartopy.crs as ccrsimport cartopy.io.shapereader as shpreaderfrom cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTERimport matplotlib.ticker as mtickerimport matplotlib.path as mpath
然后准备一些必要命令和缩写地址等:
plt.rcParams['font.sans-serif']=['SimHei']#正常显示中文extent=[108.1,111.2,28.75,31.75]#地图范围shp_path=r'E:\shp\恩施土家族苗族自治州_行政边界\恩施土家族苗族自治州_行政边界.shp'proj= ccrs.PlateCarree() #简写投影
随后创建画布,添加地图信息:
fig = plt.figure(figsize=(4,4), dpi=500) #创建画布ax=fig.add_axes([0,0,1,1],projection=proj) #添加子图geom=shpreader.Reader(shp_path) #读取shp文件ax.add_geometries(geom.geometries(),crs=proj,facecolor=(0.9375, 0.9375, 0.859375),edgecolor='k',lw=0.5)gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=False,linewidth=0.7, color='k', alpha=0.5, linestyle='--')gl.xlocator = mticker.FixedLocator(np.arange(extent[0], extent[1]+0.5, 0.5))gl.ylocator = mticker.FixedLocator(np.arange(extent[2], extent[3]+0.5, 0.5))nameandstation={"恩施":[109.5,30.2],"利川":[109,30.3],"巴东":[110.34,31.04],"建始":[109.72,30.6],"宣恩":[109.49,29.987],"来凤":[109.407,29.493],"咸丰":[109.14,29.665],"鹤峰":[110.034,29.89]}for key,value in nameandstation.items():