1

matplotlib.nxutils.points_inside_polymatplotlib では、事前に定義された頂点がある限り、 を使用してポリゴン内のピクセルを取得できます。

楕円などのパッチ内のポイントを取得するにはどうすればよいですか?

問題: 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')

ただし、C ではなく Python でループしているため、これは非常に低速です。

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 に答える