4

Rのマップ上の一連のポイントの周りにエリアをプロットするにはどうすればよいですか? 例えば

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")

...これにより、各ポイントに頂点を持つポリゴンが得られますが、かなり安っぽく見えます。ポリゴンをある種の曲線に「滑らかにする」方法はありますか?

4

2 に答える 2

3

1 つのオプションは、パッケージbezier内の関数を使用して、ベジエ曲線で囲まれた多角形を作成することです。Hmiscしかし、始点と終点がうまく結合できません。例えば:

## 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)
于 2010-08-05T07:31:05.493 に答える
0

1 つの方法として、ポリゴンを描画し、好きなだけきれいにします。これは、マップ上の領域とはまったく関係がなく、ポリゴンの頂点を生成する方法に関するものです。

    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")

それ以外の場合は、中間頂点を補間して何らかの形で滑らかにすることができます。また、経度/緯度マップのコンテキストでは、再投影を使用してより現実的な線分を取得できますが、目的によって異なります。

于 2010-08-05T01:09:12.523 に答える