1

matplotlib.nxutils.points_inside_poly在 matplotlib 中,只要您事先定义了顶点,就可以使用 获取多边形内的像素。

你怎么能得到一个补丁内的点,例如一个椭圆?

问题:如果你定义一个 matplotlib 椭圆,它有一个.get_verts()方法,但这会返回以图形(而不是数据)为单位的顶点。

可以这样做:

# there has to be a better way to do this, 
# but this gets xy into the form used by points_inside_poly
xy = np.array([(x,y) for x,y in zip(pts[0].ravel(),pts[1].ravel())]) 
inds =  np.array([E.contains_point((x,y)) for x,y in xy], dtype='bool')

但是,这非常慢,因为它在 python 而不是 C 中循环。

4

1 回答 1

2

用于ax.transData.transform()转换您的点,然后使用points_inside_poly()

import pylab as pl
import matplotlib.patches as mpatches
from matplotlib.nxutils import points_inside_poly
import numpy as np

fig, ax = pl.subplots(1, 1)
ax.set_aspect("equal")
e = mpatches.Ellipse((1, 2), 3, 1.5, alpha=0.5)
ax.add_patch(e)
ax.relim()
ax.autoscale()

p = e.get_path()
points = np.random.normal(size=(1000, 2))
polygon = e.get_verts()
tpoints = ax.transData.transform(points)
inpoints = points[points_inside_poly(tpoints, polygon)]
sx, sy = inpoints.T
ax.scatter(sx, sy)

结果:

在此处输入图像描述

于 2013-06-27T11:58:05.883 回答