r - 围绕一组点绘制曲线

标签 r graphics2d curve

我在飞机上有一组点。它们被划分为子集。
我想围绕属于同一子集的点绘制一条闭合曲线,这样属于子集的点将在曲线内,而那些不在曲线内。因此,简单的圆或凸包可能不起作用。

首先,假设我只想在一组点周围有一条平滑的曲线(不需要排除其他点)

任何想法如何在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)

结果:

chullin' it up!

编辑以添加凹面示例

这部分答案使用 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)

结果:

enter image description here

关于r - 围绕一组点绘制曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13577918/

相关文章:

r - 如何计算 R 中的风向平均值?

vb.net - 如何将直线拟合到可变曲线并确定 x 截距

android - 如何在android中创建s曲线布局

r - NOAA 航海图 tileset 与 R 中的传单集成

r - R中是否有一个函数可以同时改变几个相似的因子水平?

java - 为什么这个图像在 Java 中缩小后看起来很糟糕?

java - repaint() 方法不适用于色调图像

Java简单形状程序

svg - 我怎样才能知道 svg 二次贝塞尔曲线的峰值点坐标?

r - 带有 ggplot 的抖动图以及每组的平均线