给定三个顶点,为轮廓图生成一个三角形遮罩。

3
这里是我生成的一些随机数据:
import scipy.signal as sgn
import scipy.interpolate as intr
import numpy.ma as ma
x = np.linspace(-100,0,500)
y = sgn.sawtooth(2 * np.pi * .2 * x)

y = (sgn.sawtooth(2 * np.pi * .2 * x)+1)/2
y = (y+1)*25
plt.plot(x,y)
z = np.sin(2*np.pi*.1*x)+np.sin(2*np.pi*.1*y)

这给我这个图形: enter image description here 然后我建立了一个等高线图:
xi,yi = np.meshgrid(np.linspace(x.min(),x.max(),200),np.linspace(y.min(),y.max(),200))   
zi = intr.griddata((x,y), z, (xi, yi) , method='cubic')    
plt.contourf( xi,yi,zi,100); plt.colorbar()

enter image description here s

对于一个方形的遮罩,我这样做:
xi,yi = np.meshgrid(np.linspace(x.min(),x.max(),200),np.linspace(y.min(),y.max(),200))
mask =(yi> 25) & (yi< 35) & (xi > -55) & (xi < -25) 
zi = intr.griddata((x,y), z, (xi, yi) , method='cubic')
zi = ma.masked_array(zi, mask = mask )
plt.contourf( xi,yi,zi,100); plt.colorbar() 

enter image description here

我的问题是,如何在一个正方形的同一基准位置上放置一个三角形遮罩,给定三角形的三个坐标,即(-50,0),(-25,0),(-37,25)。


类似于 mask =(yi> 0) & (yi< 25) & (xi > -53) & (xi < -25) & ((xi+53) < yi) 这样的东西? - Dan
不,它只是削掉了正方形的右下角。 - Doomski
1
只需调整参数,直到获得所需结果。你可能可以找出正确的值,因为这是你的数据:例如 mask =(yi> 25) & (yi< 35) & (xi > -55) & (xi < -25) & ((xi+95) > 2*yi),大致类似于此。 - Dan
非常感谢,最终它确实起作用了。如果您将您的评论发布为答案,我会接受它。 - Doomski
1个回答

0
尝试按照这些方式进行:
mask =(yi> 25) & (yi< 35) & (xi > -55) & (xi < -25) & ((xi+95) > 2*yi)

换句话说,将((xi+95) > 2*yi)添加到您的掩码中。您可能需要调整一些常量以获得您想要的精确结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接