我想生成一些内部有六边形阵列的方块图,如绘制的here。我想绘制常规(几何规则)和异常六边形镶嵌,所以我不认为“sp”包中的工具可以工作。R - 绘制六角形棋盘格
下面是我尝试使用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)
然而,上面似乎错误,因为Har2基不正确格式化为一个列表的列表。
上面显然只适用于单排六边形,但我想到一旦我得到第一行,我只是将单行包装在for循环中,为每行添加一组x和y距离。我只是无法弄清楚如何格式化har2,以便我可以直接将其插入到owin的poly函数中。
我打算彻底改变上述做法,我对R还是比较陌生的,所以我绝对还是不知道如何以最有效率的方式做事。我目前在Win 10 x64上运行R版本3.3.2运行RStudio V0.99.903
任何帮助表示赞赏。
谢谢!
与我的ggplot hack相比,这直接创建了所需的tesselation模式,并且在转换方面更加灵活。希望OP会回来并选择这个作为最佳答案。另外,如果你摆脱了所有'#>'和'#> affn.t>',并提供了裸代码,这样人们可以复制和粘贴而无需编辑光标字符,这将会很有帮助。 – eipi10
感谢您的好评@ eipi10。我已经更新了我的答案,以便更容易复制和粘贴。 –