在R中绘制两个填充多边形的交点

时间:2013-12-01 21:21:54

标签: r plot polygons

x1y1为长度相等的向量,定义polygon1的顶点坐标。
x2y2为等长的向量,定义polygon2的顶点坐标。

例如,

Polygon1可以通过polygon(x1,y1,border=NA,col=rgb(0,0,0))

绘制

最简单的方法是什么(最好是在基础R中,即没有任何包装),只填充属于polygon1和polygon2的区域?换句话说,绘制(填充)由多边形2剪切的多边形1的最简单方法是什么?

背景

我正在使用它在标准图下遮蔽轮廓(多色)区域。每个轮廓间区域需要与图下的区域相交。

在我的情况下对多边形的一些限制:

如果重要的话,在我的情况下,polygon1可以定义为x轴和y = f1(x)之间的区域,而多边形2可以定义为y = a * f2(x)和y = a * f2(x)之间的区域。 y = b * f2(x)其中a> b。

简单示例数据:

x1 <- 0:6
y1 <- c(0,1,2,1,0,-1,0)
x2 <- c(x1,rev(x1))
y2 <- c(x1*rev(x1)/5,x1*rev(x1)/10)

2 个答案:

答案 0 :(得分:1)

由于您未在示例中提供定义明确的函数,因此无法以数学方式定义交集区域。你可以一个接一个地定义这个地区。

另一个选项是,您可以使用Alpha混合来区分区域。

xA <- 0:6
yA <- c(0,1,2,1,0,-1,0)
xB <- c(x1,rev(x1))
yB <- c(x1*rev(x1)/5,x1*rev(x1)/10)
plot(NA,xlim=extendrange(c(xA,xB)),
            ylim=extendrange(c(yA,yB)),xaxs='i',yaxs='i',frame.plot=F)
polygon(x = c(xA,tail(xA,1)), y = c(yA,0),col=rgb(1,0,1,0.5),border="white")
polygon(x = c(xB,tail(xB,1)), y = c(yB,0),col=rgb(1,0,1,0.5),border='white')

enter image description here

答案 1 :(得分:0)

通过用白色填充两个多边形外部的所有内容来绘制必需的多边形。显然,它必须在绘图中的其他所有内容之前绘制,并且不能给出透明的背景。如果需要在同一个图中绘制多个这样的多边形,这将不起作用。

xlim <- c(min(x1,x2),max(x1,x2))
ylim <- c(min(y1,y2),max(y1,y2))
xlim <- xlim+c(-1,1)*(xlim[2]-xlim[1])*0.04 # extend by 4% on each side
ylim <- ylim+c(-1,1)*(ylim[2]-ylim[1])*0.04 # extend by 4% on each side
n1 <- length(x1)
n2 <- length(x2)
xS <- c(xlim[1],xlim,rev(xlim),xlim[1])
yS <- c(0,rep(ylim,each=2),0)
plot(NA,xlim=xlim,ylim=ylim,xaxs='i',yaxs='i')
polygon(xS,yS,border=NA,col=rgb(0,0,0))
polygon(c(x1,xS),c(y1,yS),border=NA,col=rgb(1,1,1))
polygon(c(x2,xS),c(y2,yS),border=NA,col=rgb(1,1,1))
box()
polygon(x1,y1)
polygon(x2,y2)

plotted intersection of polygon 1 and polygon 2

所以对我来说,这个答案并没有削减它。但也许它可以将一些想法的种子植入其他人如何做到这一点。