#r #ggplot2 #voronoi
#r #ggplot2 #вороной
Вопрос:
Я нашел метод рисования сегментов тесселяции Вороного с использованием ggplot2 :
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")
Я хотел бы знать, можно ли рисовать полигоны вместо сегментов, но я не знаю, как создать набор данных с контуром каждого полигона.
Ответ №1:
Вот простой способ преобразовать отрезки в 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)))
Комментарии:
1. Если вы хотите нарисовать полигоны с помощью ggplot: wp <- fortify(pp) ggplot(data = wp) geom_polygon(aes(x = long, y = lat, group = group, fill = id))
2. @PAC — Хорошо, что вы это добавили. Я не собирался добавлять его без некоторых (бесполезных для меня) исследований!