我有一些数据,看起来像这样:
我已经使用from skimage.measure import EllipseModel
围绕一些数据绘制了一个椭圆,我能够通过向包提供B0_M数据和5200到5350之间的相应q^2来拟合椭圆,然后我能够从拟合中提取一些参数,自己绘制椭圆,如下所示:
X1Y1 = np.column_stack((X1,Y1))
ell = EllipseModel()
ell.estimate(X1Y1)
xc, yc, a, b, theta = ell.params
其中X1
是完整的B_0数据,X2
是完整的q^2数据集。它返回了以下椭圆参数值:
a = 0.399894
b = 37.826
xc = 5272
yc = 9.27
theta = 1.573
不幸的是,这个拟合并不完美,所以我缩放了一些参数,或者添加了一些小数字等,本质上是为了得到图中所示的拟合。
xc, yc, a, b, theta = ell.params
t = np.linspace(0, 2*np.pi, 100)
dt = 0.01*theta
ell_x = xc + 2*a*np.cos(theta+dt)*np.cos(t) - 1.8*b*np.sin(theta+dt)*np.sin(t)
ell_y = yc + 0.47*a*np.sin(theta+dt)*np.cos(t) + 0.47*b*np.cos(theta+dt)*np.sin(t)+0.26
plt.scatter(X,Y, marker = '.', alpha = 0.05, color = 'navy', s =0.2)
plt.scatter(xc, yc+0.26, color='red', s=10)
plt.plot(ell_x, ell_y, color = 'red')
plt.xlim(5150,5400)
plt.ylim(7,12)
plt.xlabel('B0_M')
plt.ylabel('$q^2$')
plt.title('jpsi')
现在,我要移除椭圆内X1
和Y1
中的所有点
我该怎么做呢,我想用一个简单的数学论证,比如椭圆方程,但它更复杂,因为我有参数形式,而且它也不是最整洁的东西,因为我之前说过,用不同的量来缩放不同的变量。
有没有什么方法可以简单地说,“删除X,Y中的点,如果它们位于坐标为ell_x和ell_y的椭圆内”?
多谢
1条答案
按热度按时间13z8s7eq1#
我认为你可以使用椭圆方程来构造一个屏蔽来隔离模型之外的点,技巧是在应用椭圆方程之前,使用
xc
、yc
和theta
将X1
和Y1
转换到椭圆的坐标系中。注意:我希望
skimage.measure.Ellipse
有一些方法可以使这变得更容易,但是我在快速阅读文档后找不到它。如果有人知道如何使用Ellipse
来做这件事,那将更具可读性。