我有一个像
的情节
我的目标是过滤掉内圈内的所有数据。
我已经尝试过仅通过绘制圆的数据进行过滤,问题是有X和Y值并且它们位于笛卡尔地图的所有4个空格中,所以如果一个点在上面可能没问题(按大于某些值的值进行过滤)但这会滤除仍在内圈之外但在其下方的值。
我也试过用积分做事但我的数学生锈了。积分假设能够识别曲线下的值。如果曲线绘制内圈,我可以过滤掉值。对我来说,知道,说起来容易做,所以请帮助。
PS:非英语母语者,请原谅我。圈子由以下人员创建:
radii=c(sqrt(1/2),1)
theta <- seq(0, 2 * pi, length = 500)
#Inner Circle:
xtemp1=radii[1]*cos(theta)
ytemp1=radii[1]*sin(theta)
circ1=as.data.frame(cbind(xtemp1,ytemp1))
#Outer Circle:
xtemp2=radii[2]*cos(theta)
ytemp2=radii[2]*sin(theta)
circ2=as.data.frame(cbind(xtemp2,ytemp2))
这是一小部分数据(名为temp):
Comp_1,Comp_2
0.253,-0.29
-0.23,0.222
-0.384,0.432
-0.032,0.805
-0.261,0.265
-0.181,0.344
-0.133,-0.436
-0.358,-0.004
-0.139,-0.314
0.303,0.257
-0.131,0.602
对于剧情:
#Plot
p1=ggplot(data=temp, aes(x=Comp_1, y=Comp_2)) + geom_point() +
scale_x_continuous(limits=c(-1,1), breaks=seq(-1,1,by=0.1)) +
scale_y_continuous(limits=c(-1,1), breaks=seq(-1,1,by=0.1))
#Circle
p1=p1 + geom_polygon(data=circ1, aes(x=xtemp1, y=ytemp1),size=0.5,inherit.aes = F, colour="black", fill=NA, alpha=0.5) +
geom_polygon(data=circ2, aes(x=xtemp2, y=ytemp2),size=0.5,inherit.aes = F, colour="black", fill=NA, alpha=0.5)
答案 0 :(得分:3)
这听起来像多边形中的点问题(https://en.wikipedia.org/wiki/Point_in_polygon)。 sp库中的point.in.polygon()函数可能很有用。
point.in.polygon(Comp_1,Comp_2,xtemp1,ytemp1)
答案 1 :(得分:1)
圆的方程是x ^ 2 + y ^ 2 = R ^ 2,因此数据集中x ^ 2 + y ^ 2 要删除落入内圈的点,您只需要filtered_out = temp[apply(temp^2,1,sum) > radii[1]^2,]