2014-06-19 1 views
2

J'ai trouvé une méthode pour dessiner les segments d'un Voronoi en utilisant ggplot2 tesselation:Comment puis-je dessiner les polygones d'une Tesselation de Voronoi au lieu des segments?

library(deldir) 
library(ggplot2) 
library(ggthemes) 
set.seed(123) 
df <- data.frame(lat = rnorm(20,39,10),long = rnorm(20,-98,15)) 
voronoi <- deldir(df$long, df$lat) 

ggplot(data=df, aes(x=long,y=lat)) + 
    geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2),size = 2,data = voronoi$dirsgs,linetype = 1,color= "#419AB0") + 
    geom_point(fill="#EACA3E",pch=21,size = 4,color="white") 

Je voudrais savoir s'il est possible de dessiner des polygones intead de segments, mais je ne sais pas comment créer un jeu de données avec le contour de chaque polygone.

Répondre

4

Voici un moyen simple de convertir les segments de ligne en objets SpatialPolygons.

library(rgeos) 

## Convert data.frame of segment coordinates to a list of SpatialLines objects 
ll <- apply(voronoi$dirsgs, 1, FUN=function(X) { 
    readWKT(sprintf("LINESTRING(%s %s, %s %s)", X[1], X[2], X[3], X[4])) 
}) 

## Convert SpatialLines list to SpatialPolygons object 
pp <- gPolygonize(ll) 

## Plot to check that it works  
set.seed=11 
plot(pp, col=sample(colors(), length(pp))) 

enter image description here

+0

Si vous voulez dessiner les polygones à l'aide ggplot: wp <- renforcer (p) ggplot (data = wp) + geom_polygon (aes (x = long, y = latitude, groupe = group, fill = id)) – PAC

+1

@PAC - Bon de votre part d'ajouter ça. Je n'allais pas pouvoir l'ajouter sans quelques recherches (inutiles à moi)! –

Questions connexes