java判断一个点在不规则面内_在多边形内轮廓不规则数据

我需要在多边形内创建海面温度(SST)数据的填充等高线图,但我不确定这样做的最佳方法 . 我有三个包含X,Y和SST数据的一维数组,我使用以下内容绘制以创建附图:

p=PatchCollection(mypatches,color='none', alpha=1.0,edgecolor="purple",linewidth=2.0)

levels=np.arange(SST.min(),SST.max(),0.2)

datamap=mymap.scatter(x,y,c=SST, s=55, vmin=-2,vmax=3,alpha=1.0)

我希望能够将这些数据绘制为在多边形边界(紫色线)内受约束(剪切)的填充轮廓(contourf而不是散射) . 非常感谢有关如何实现这一目标的建议 .

960140de-e0f6-493b-9d82-e1467d7a976c.png

Update: 我最初尝试过griddata,但无法让它正常工作 . 但是,根据@eatHam提供的答案,我决定再试一次 . 当我选择方法'cubic'时,我无法让我的scipy griddata工作,因为它一直悬挂在网格上,但是当我切换到matplotlib.mlab.griddata并使用'linear'插值时它工作了 . 掩盖边界的建议提供了一个非常粗略而不是我想要的精确解决方案 .

4737a9d0-d2aa-492b-a689-babac0105a1b.png

我搜索了如何在matplotlib中剪辑轮廓的选项,我在@446352_找到了@pelson的答案 . 我尝试了暗示的建议解决方案:"The contour set itself does not have a set_clip_path method but you can iterate over each of the contour collections and set their respective clip paths" . 我的新的最终解决方案看起来像这样(见下图):

p=PatchCollection(mypatches,color='none', alpha=1.0,edgecolor="purple",linewidth=2.0)

levels=np.arange(SST.min(),SST.max(),0.2)

grid_x, grid_y = np.mgrid[x.min()-0.5*(x.min()):x.max()+0.5*(x.max()):200j,

y.min()-0.5*(y.min()):y.max()+0.5*(y.max()):200j]

grid_z = griddata(x,y,SST,grid_x,grid_y)

cs=mymap.contourf(grid_x, grid_y, grid_z)

for poly in mypatches:

for artist in ax.get_children():

artist.set_clip_path(poly)

ax.add_patch(poly)

mymap.drawcountries()

mymap.drawcoastlines()

mymap.fillcontinents(color='lightgrey',lake_color='none')

mymap.drawmapboundary(fill_color='none')

在推断北方的极端边缘方面,这种解决方案也可以特别改进 . 关于如何真正“填充”完整多边形的建议值得赞赏 . 我也想了解为什么mlab工作和scipy没有 .

b6e790c1-bbe9-461c-a6af-23cefbffda00.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值