如何在R中的地图上绘制一组点周围的区域? e.g。
map('world')
map.axes()
p <- matrix(c(50, 50, 80, 100, 70, 40, 25, 60), ncol=2) # make some points
points(p, pch=19, col="red")
polygon(p, col="blue")
...它给了我一个在每个点都有顶点的多边形,但看起来很糟糕。有没有办法将多边形“平滑”成某种曲线?
答案 0 :(得分:3)
一种选择是使用bezier
包中的Hmisc
函数创建一个由Bézier曲线限定的多边形。但是我不能得到开始/结束点整齐地加入。例如:
## make some points
p <- matrix(c(50, 50, 80, 100, 70, 40, 25, 60), ncol=2)
## add the starting point to the end
p2 <- cbind(1:5,p[c(1:4,1),])
## linear interpolation between these points
t.coarse <- seq(1,5,0.05)
x.coarse <- approx(p2[,1],p2[,2],xout=t.coarse)$y
y.coarse <- approx(p2[,1],p2[,3],xout=t.coarse)$y
## create a Bezier curve
library(Hmisc)
bz <- bezier(x.coarse,y.coarse)
library(maps)
map('world')
map.axes()
polygon(bz$x,bz$y, col=rgb(0,0,1,0.5),border=NA)
答案 1 :(得分:0)
这是一种方法,绘制多边形并使其尽可能漂亮。这实际上与地图上的区域无关,更多的是关于如何生成多边形的顶点。
library(maps)
p <- matrix(c(50, 50, 80, 100, 70, 40, 25, 60), ncol=2)
plot(p, pch = 16, col = "red", cex = 3, xlim = range(p[,1]) + c(-10,10), ylim = range(p[,2]) + c(-5, 5))
map(add = TRUE)
#click until happy, right-click "stop" to finish
p <- locator(type = "l")
map()
polygon(cbind(p$x, p$y), col = "blue")
否则你可以插入中间顶点并以某种方式平滑它们,并且在lon / lat地图的上下文中可以使用重新投影来获得更真实的线段 - 但取决于你的目的。