Nat*_*han 6 plot r hexagonal-tiles tesselation spatstat
我想生成一些方形图,里面有六边形数组,就像这里绘制的一样。我想绘制常规(几何规则)和异常六边形镶嵌,所以我认为“sp”包中的工具不起作用。
下面是我使用 owin 和 plot 进行正六边形镶嵌的尝试。
library(maptools)
library(spatstat)
twid <- 20
theight <- 20
sideL <- 2
rp1 <- (sideL/2)*sqrt(3)
rp2 <- 2*(sideL/2)*sqrt(3)
rp3 <- 3*sideL
bx <- c(1:floor(twid/rp3))
by <- c(1:floor(theight/rp3))
hex_array1 <- list(bx)
hex_array2 <- list(by)
for(i in 1:ceiling(twid/rp3)){
bx[i] <- list(x=c(0+rp3*i,1+rp3*i,3+rp3*i,4+rp3*i,3+rp3*i,1+rp3*i))
by[i] <- list(y=c(rp1,rp2,rp2,rp1,0,0))
hex_array1[i] <- bx[i]
hex_array2[i] <- by[i]
}
har1 <- list(x=c(0,1,3,4,3,1), y=c(rp1,rp2,rp2,rp1,0,0))
har2 <- list(x=hex_array1,y=hex_array2)
hexig <- owin(poly=list(list(x=c(0,twid,twid,0), y=c(0,0,theight,theight)),
har1, har2
)
)
plot(hexig)
Run Code Online (Sandbox Code Playgroud)
但是,由于 har2 未正确格式化为列表列表,因此上述内容似乎出错了。
以上显然仅适用于单行六边形,但我想一旦获得第一行,我只需将单行包装在 for 循环中,为每行添加一组 x 和 y 距离。我只是不知道如何格式化 har2 以便我可以将它直接插入到 owin 的 poly 函数中。
我愿意完全改变我完成上述工作的方式,我对 R 还是比较陌生,所以我绝对仍然不知道如何以最有效/最优雅的方式做事。我目前在运行 RStudio V0.99.903 的 Win 10 x64 上运行 R 版本 3.3.2
任何帮助表示赞赏。
谢谢!
我认为spatstat正是您正在寻找的功能:hextess
和affine.tess。
看一下 的示例affine.tess。以下是您可以执行的操作的示例(添加trim = FALSE以避免边界框):
library(spatstat)
H <- hextess(square(5), 0.2)
plot(H)
Run Code Online (Sandbox Code Playgroud)

shear <- matrix(c(1,0,0.6,1), 2, 2)
sH <- affine(H, shear)
plot(sH)
Run Code Online (Sandbox Code Playgroud)
