Numpy 轮廓图的给定路径(三角形、正方形等)内的遮罩值

Numpy 轮廓图的给定路径(三角形、正方形等)内的遮罩值,numpy,matplotlib,Numpy,Matplotlib,我试图掩盖轮廓图的特定位置(三角形、正方形)。我可以根据Z值来制作遮罩,但是发现很难根据x和y值来制作。对于下面的MWE,我想在给定的X、Y值(三角形或正方形)之间创建一个遮罩。假设在下面的例子中,我想屏蔽点(0,0)、(2,0)、(0,2)之间形成的三角形内的值。我希望基本上能够提供一个封闭的路径,并屏蔽这些值之间的所有内容。我已经尝试过这种方法,但是我必须为单独的X和Y值提供逻辑,这对于复杂的路径来说变得很麻烦 import numpy as np import matplotlib.pyp

我试图掩盖轮廓图的特定位置(三角形、正方形)。我可以根据Z值来制作遮罩,但是发现很难根据x和y值来制作。对于下面的MWE,我想在给定的X、Y值(三角形或正方形)之间创建一个遮罩。假设在下面的例子中,我想屏蔽点(0,0)、(2,0)、(0,2)之间形成的三角形内的值。我希望基本上能够提供一个封闭的路径,并屏蔽这些值之间的所有内容。我已经尝试过这种方法,但是我必须为单独的X和Y值提供逻辑,这对于复杂的路径来说变得很麻烦

import numpy as np
import matplotlib.pyplot as plt

origin = 'lower'

delta = 0.025

x = y = np.arange(-3.0, 3.01, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

  
fig1, ax2 = plt.subplots(constrained_layout=True)
CS = ax2.contourf(X, Y, Z, 10, cmap=plt.cm.viridis, origin=origin,extend='both')

  
ax2.set_title('Random Plot')
ax2.set_xlabel('X Axis')
ax2.set_ylabel('Y Axis')
cbar = fig1.colorbar(CS)

凸形(如三角形)可由穿过其顶点的直线方程定义。在这种情况下,方程非常简单:
X>=0
是通过
0,0
0,2
的直线右侧区域。类似的
Y>=0
X+Y=0)和(Y>=0)和(X+Y一个凸形,如三角形,可以由穿过其顶点的线的方程来定义。在这种情况下,方程非常简单:
X>=0
是穿过
0,0
0,2
的线的区域右侧。类似的
Y>=0
X+Y=0)&(Y>=0)(X+Y谢谢,这很好。我认为需要基于直线方程的逻辑,但您提供一般传递解决方案的方式正是我需要的。谢谢,这很好。我认为需要基于直线方程的逻辑,但您提供一般传递解决方案的方式正是我需要的。
(X - x1) * (y2 - y1) - (Y - y1) * (x2 - x1) == 0
def line_eq(X, Y, p1, p2):
    x1, y1 = p1
    x2, y2 = p2
    return (X - x1) * (y2 - y1) - (Y - y1) * (x2 - x1) >= 0

p = [(0, 0), (0, 2), (2, 0)] # clockwise ordering
Z[line_eq(X, Y, p[0], p[1]) & line_eq(X, Y, p[1], p[2]) & line_eq(X, Y, p[2], p[0])] = np.nan