2016-04-28 7 views
3

私はR:データ値でボロノイの色を塗る方法は?

  1. にしたいがSpatialPointDataFrame OK
  2. からRにおけるボロノイテッセレーションを作成
  3. SpatialPolygonDataFrame OKを得るどのように私の元SpatialPointDataFrameの値によってそれを色付け???
  4. 限り

: とここで更新:https://gis.stackexchange.com/questions/190917/r-voronoi-tesselation-from-long-lat-dataを 私は、次の、ボロノイテッセレーションを作成し、更新しました。

私は図書館(「dismo」)ことによってそれを色付けすることができます知っている:https://gis.stackexchange.com/questions/136542/r-function-for-thiessen-polygons

しかし、上記のボロノイ機能を使用して、私のvoronoipolygonsで、私は1つの変数のみ持っている:「ダミー」。しかし、変数 "z"でポリゴンの色付けをしたいのですが、これは私の.voroポリゴンには含まれていません。

voronoipolygons = function(layer) { 
    require(deldir) 
    crds = [email protected] 
    z = deldir(crds[,1], crds[,2]) 
    w = tile.list(z) 
    polys = vector(mode='list', length=length(w)) 
    require(sp) 
    for (i in seq(along=polys)) { 
    pcrds = cbind(w[[i]]$x, w[[i]]$y) 
    pcrds = rbind(pcrds, pcrds[1,]) 
    polys[[i]] = Polygons(list(Polygon(pcrds)), ID=as.character(i)) 
    } 
    SP = SpatialPolygons(polys) 
    voronoi = SpatialPolygonsDataFrame(SP, data=data.frame(dummy = seq(length(SP)), 
                 row.names=sapply(slot(SP, 'polygons'), 
                            function(x) slot(x, 'ID')))) 
} 

私の質問は:"z"変数、または/および方法真上voronoipolygons()機能に含めることで、私の.voroポリゴンを色付けする方法?値の順序が変更されているため、[email protected]に変数"z"を追加するだけではなりません。私のRスキルはまだ強くはありません..ありがとうございました!

ダミーデータ:

x <- c(32.5, 32.1, 33.5, 32.2, 33.0) 
y <- c(-2.2, -3.3, -2.3, -2.9, -3.0) 
z <- c(1, 2, 5, 8, 4) 

# make df 
df<-as.data.frame(cbind(x,y,z)) 
coordinates(df)<- ~ x + y #make SPDF 

df.voro <- voronoipolygons(df) # calculated VORONOI 

require('dismo') 
spplot(df.voro, "dummy") # colorize Polygons 

# add z variable to newly created data 
[email protected]$z<-df$z ## !!! can't use this, because this change order of values in df !!! 
spplot(df.voro, "z") 

答えて

3

私はそれを持っています!

私のdata.frame:my.variable = [email protected][,1]からmy.variableをまず読み込み、それを私のSPオブジェクトに:y.data = my.variableとして追加する必要があります。

voronoipolygons2 = function(layer) { 
    require(deldir) 
    crds = [email protected] 
    z = deldir(crds[,1], crds[,2]) 
    w = tile.list(z) 
    my.variable = [email protected][,1] ## HERE 
    polys = vector(mode='list', length=length(w)) 
    require(sp) 
    for (i in seq(along=polys)) { 
    pcrds = cbind(w[[i]]$x, w[[i]]$y) 
    pcrds = rbind(pcrds, pcrds[1,]) 
    polys[[i]] = Polygons(list(Polygon(pcrds)), ID=as.character(i)) 
    } 
    SP = SpatialPolygons(polys) 
    voronoi = SpatialPolygonsDataFrame(SP, data=data.frame(dummy = seq(length(SP)), 
                 my.data = my.variable, # HERE add new column to my voronoi data 
                 row.names=sapply(slot(SP, 'polygons'), 
                      function(x) slot(x, 'ID')))) 
} 

修正ボロノイ機能によってボロノイテッセレーションのポリゴンを作成します。私のvoronoi2データがどのように見えるか

df.voro2 <- voronoipolygons2(df) 

チェック

> [email protected] 
    dummy my.data 
1  1  1 
2  2  2 
3  3  5 
4  4  8 
5  5  4 

とどのように彼らはvoronoi1データと異なっているような

> [email protected] 
    dummy 
1  1 
2  2 
3  3 
4  4 
5  5 

ディスプレイ1枚の用紙に両方spplots

require(gridExtra) 
grid.arrange(spplot(df.voro, "dummy", xlab = "x", ylab = "y", main = "original"), 
      spplot(df.voro2, "my.data", xlab = "x", ylab = "y", main = "z value applied !;-)")) 

TRADAAA;)

enter image description here

関連する問題