我在飞机上有一组点。它们被划分为子集。
我想围绕属于同一子集的点绘制一条闭合曲线,这样属于子集的点将在曲线内,而那些不在曲线内。因此,简单的圆或凸包可能不起作用。
首先,假设我只想在一组点周围有一条平滑的曲线(不需要排除其他点)
任何想法如何在R中做到这一点?
---稍后添加---
我最终看到的是这里的图形精神:https://tex.stackexchange.com/questions/1175/drawing-a-hypergraph - 尽管上下文不是超图,而是一组给定的点和这些点的分区。
最佳答案
好的,这是我认为接近您所追求的答案的一个版本:
它使用 spline.poly
在 GIS 论坛上的此答案 ( https://gis.stackexchange.com/a/24929 ) 上创建的函数。
以下是一些示例点:
testpts <-
structure(list(x = c(4.9, 4.2, 4, 4.1, 4.4, 5.8, 5.8, 5.8, 5.8,
5.5, 4.9, 3.2, 3.2, 3.3, 5.4, 5.4, 5.7, 6.4, 6.7, 6.7, 6, 4.8,
3.6, 2.8, 3.5, 4.4, 5.1, 4, 3.7, 4.5, 4.9, 5.7), y = c(6.9, 6.2,
5.3, 4.1, 3.1, 2.9, 2.9, 3.5, 4.2, 4.9, 5.1, 4.9, 4.9, 5.2, 6.9,
6.9, 5.3, 3.8, 4.2, 5.6, 6.9, 5.8, 1.2, 2.5, 5.3, 6.4, 6.8, 7.6,
6.9, 5.4, 4.8, 4.4)), .Names = c("x", "y"))
设置基本绘图
plot(NA,xlim=c(0,10),ylim=c(0,10))
points(testpts,pch=19)
chuld <- lapply(testpts,"[",chull(testpts))
polygon(chuld,lty=2,border="gray")
polygon(spline.poly(as.matrix(as.data.frame(chuld)),100),border="red",lwd=2)
结果:
编辑以添加凹面示例
这部分答案使用
alphahull
图书馆# load the required library
library(alphahull)
plot(NA,xlim=c(0,10),ylim=c(0,10))
points(testpts,pch=19)
# remove duplicate points so the ahull function doesn't error out
testptsnodup <- lapply(testpts,"[",which(!duplicated(as.matrix(as.data.frame(testpts)))))
生成并绘制 ahull 对象 - 在确定多边形与数据的拟合时,alpha 值似乎非常重要。
ahull.obj <- ahull(testptsnodup,alpha=2)
plot(ahull.obj,add=TRUE,col="red",wpoints=FALSE)
结果:
关于r - 围绕一组点绘制曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13577918/