获取补丁内的像素

时间:2013-06-26 20:44:59

标签: matplotlib

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

如何在补丁中获得积分,例如椭圆?

问题:如果你定义一个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中循环。

1 个答案:

答案 0 :(得分: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)

结果:

enter image description here