gpt4 book ai didi

python - matplotlib.patches.Polygon 函数 contains_point() 无法解析面片中的点

转载 作者:太空宇宙 更新时间:2023-11-04 04:47:54 30 4
gpt4 key购买 nike

我正在使用 matplotlib.patches.Polygon 来更新图形上的一些彩色补丁,并且我在代码的每次迭代中都这样做。因为我已经用这种方式在我的代码中定义了补丁,所以我想使用 函数 contains_point() 来判断一个点是否在 补丁或它之外。到目前为止,看起来工作正常 - 但我不想这样做,我宁愿继续使用 matplotlib 工作。问题出现在调用 add_patch() 之后:在这种情况下,补丁将返回相同的坐标,但函数 contains_point() 将不会返回正确的值

import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib import gridspec
import numpy as np

让我们定义一些我们想要添加补丁的轴

gs = gridspec.GridSpec(1,1)
axx = [plt.subplot(g) for g in gs]

让我们看看axx是什么类型:

In[84]: axx
Out[84]: [<matplotlib.axes._subplots.AxesSubplot at 0x7fd4b3409cd0>]

现在让我们用顶点v定义一个补丁b

v = 
np.array([[ 6.89 , -10.00907385],
[ 5.11 , -10.00907385],
[ 5.11 , -14.68307385],
[ 6.89 , -14.68307385],
[ 6.89 , -10.00907385]])
b = [patches.Polygon(v, color = (0,0,1))]

我们可以测试一下:

In[86]: b[0].contains_point((5.5,-12))  
Out[86]: True

现在让我们将补丁添加到之前初始化的子图中

axx[0].add_patch(b[0])

让我们再次测试同一个点 (5.5,-12) 是否落在补丁 b

In[88]: b[0].contains_point((5.5,-12))
Out[88]: False
In[89]: b[0].get_xy()
Out[89]:
array([[ 6.89 , -10.00907385],
[ 5.11 , -10.00907385],
[ 5.11 , -14.68307385],
[ 6.89 , -14.68307385],
[ 6.89 , -10.00907385]])

最佳答案

将多边形添加到坐标区后,contains_point 使用内部坐标来确定某个点是否包含在多边形中。

因此您需要先将您的转换为屏幕坐标系,然后查询它是否包含在面片poly中,

poly.contains_point(ax.transData.transform(point))

或者,使用补丁的路径'contains_point 方法,而不指定任何转换,

poly.get_path().contains_point(point)

完整示例代码:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import numpy as np

a = np.array([[2,6],[4,6],[4,8],[2,8],[2,6]])

poly = patches.Polygon(a)
point = (3,7)

cp1 = poly.contains_point(point)
print (cp1) # prints True


fig,ax = plt.subplots()
ax.add_patch(poly)

cp2 = poly.contains_point(ax.transData.transform(point))
print(cp2) # prints True
cp3 = poly.get_path().contains_point(point)
print(cp3) # prints True

ax.scatter(point[0],point[1], color="crimson", zorder=6)
plt.show()

关于python - matplotlib.patches.Polygon 函数 contains_point() 无法解析面片中的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49098942/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com