如何排序alphahull提取的点坐标,适配R的lines()与my.symbols?
问题:获取可适配
TeachingDemos::my.symbols()的草形有序坐标数据框 我用R的sf包绘制农田示意图,需要为永久草地添加草形符号。此前已通过TeachingDemos::my.symbols()成功添加阔叶树、针叶树和橡树符号,该函数要求输入包含x、y坐标列的矩阵/数据框,且点的顺序需满足lines()可正确绘制线条的要求,针叶树符号示例代码如下:
X11(width = 10, height = 10) plot(x = 1:10, y = 1:10, type = "n") ms.cfs <- as.matrix(data.frame(x = c(-0.84, 0, 0.84), y = c(-0.4, 0.67, -0.4))) library(TeachingDemos) my.symbols(x = 5.5, y = 5.5, ysize = 3, symb = ms.cfs)
尝试过程中遇到的问题
ms.image加载失败:找到合适的草形图标后,尝试用TeachingDemos::ms.image加载,但会占用全部绘图区域,无法正常使用,验证代码:
library(png) ms.grass <- readPNG("grass_symbol.png") my.symbols(x = 2, y = 2, ysize = 1, symb = ms.image(ms.grass, transpose = TRUE))
- 提取像素坐标存在冗余:从
png包生成的对象中提取非零像素坐标,能看到草形但存在大量冗余点:
ms.grass <- ms.grass[,,4] ms.grass <- t(ms.grass) ms.grass <- which(ms.grass != 0, arr.ind = TRUE) ms.grass[,2] <- 49 - ms.grass[,2] plot(ms.grass)
- 轮廓点顺序错误:使用
alphahull包提取正确的轮廓点,绘图显示正常,但提取坐标后顺序错误,无法通过lines()绘制正确草形:
library(alphahull) ms.gs <- ashape(ms.grass, alpha = 0.75) plot(ms.gs)
提取坐标的代码:
ms.gs1 <- ms.gs$edges[, c("x1", "y1", "x2", "y2")] ms.gs1 <- as.data.frame(matrix(t(ms.gs1), byrow = TRUE, ncol = 2)) names(ms.gs1) <- c("x", "y")
核心需求
不需要空间多边形对象,仅需得到类似ms.cfs的有序坐标数据框,保证lines()可正确绘制草形,如何实现?
补充说明:aplpack::puticon()可解决实际绘图需求,但未解决坐标排序的核心问题。
内容的提问来源于stack exchange,提问作者mattu
相关产品推荐
相关产品推荐

