在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中循环。
答案 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)
结果: