- 积分
- 61
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2022-8-14
- 最后登录
- 1970-1-1
|
发表于 2024-4-28 21:51:16
|
显示全部楼层
作者大大 我用了你的代码 如果不要最后这个for循环他就填色全部子图,超出我想要的范围外,但是如果又加了这个for循环他就整个子图不填色了 我真的有点搞不懂 能麻烦解答一下吗?谢谢啦,附代码:
################右场####################
f1_ax2 = fig1.add_axes([0.65, 0.6, 0.5, 0.5], projection=ccrs.PlateCarree(central_longitude=104))
f1_ax2.add_geometries(shpreader.Reader('Map/south_west/自定义.shp').geometries(), ccrs.PlateCarree(), facecolor='none', edgecolor='k', linewidth=0.5) # 地理信息
leftlon, rightlon, lowerlat, upperlat = (97, 110.3, 21, 34.4)
img_extent = [leftlon, rightlon, lowerlat, upperlat]
b = contour_map(f1_ax2, img_extent,2, 2)
f1_ax2.set_title('1st pattern of right', loc='center', fontsize=18)
f1_ax2.set_title('(b)', loc='left', fontsize=18)
c2 = f1_ax2.contourf(pre_lon, pre_lat, moulde[0]['right'][:,:,0], zorder=0, extend='both', levels=np.arange(-0.3,0.4,0.1), transform=ccrs.PlateCarree(), cmap=plt.cm.RdBu_r)
cbar2 = fig1.colorbar(c2, ax=f1_ax2, orientation='vertical', fraction=0.05, pad=0.05)
################掩膜####################
sf = shapefile.Reader('Map/south_west/自定义.shp')
shapes = sf.shapes()
codes = []
pts = shapes[0].points #边界点
x,y = zip(*pts)#把经纬度分别给到x,y
prt = list(shapes[0].parts) + [len(pts)] #区块起始索引
for i in range(len(prt) - 1):
codes += [Path.MOVETO] #点移动
codes += [Path.LINETO] * (prt[i+1] - prt[i] -2)#画线
codes += [Path.CLOSEPOLY] #这块画完,循环结束,下一块
clip = Path(pts, codes) #利用数据和路径生成一个画图动作
clip = PathPatch(clip, transform=f1_ax2.transData) #再加入ax的变换'''
for contour in f1_ax2.collections:
contour.set_clip_path(clip) |
|