Создайте сетку в Polygon и заполните ее, используя geom_tile - PullRequest
0 голосов
/ 15 января 2020

Я хотел бы спросить, как создать сетку внутри многоугольника, а затем заполнить сетку цветами, указанными в координатах сеток.

Например, заполните каждый многоугольник сетки случайным цветом из 5 цветов или что-то вроде что.

пример данных:

library(leaflet)
library(ggplot2)
library(sf)
library(spdep)

URL <- "https://biogeo.ucdavis.edu/data/gadm3.6/Rsp/gadm36_CZE_0_sp.rds"
data <- readRDS(url(URL))

ggplot() + 
  geom_polygon(data = data, aes(x=long, y = lat, group = group), color = "black", fill = F)

1 Ответ

1 голос
/ 15 января 2020

Вот простой пример использования st_make_grid() для создания сетки в вашем многоугольнике и brewer.pal() для создания цветовой палитры, чтобы заполнить их.

library(tidyverse)
library(sf)
#> Linking to GEOS 3.6.2, GDAL 2.2.3, PROJ 4.9.3

p1 <- st_polygon(list(rbind(c(0,0),c(1,0),c(1,1),c(0,1), c(0,0))))
grid <- st_make_grid(p1, n = 2)

number_of_cells <- length(grid)
colors <- RColorBrewer::brewer.pal(number_of_cells, name = 'PuBuGn')

ggplot(grid) +
  geom_sf(fill = colors)



#Example using multipolygon shapefile
nc <- read_sf(system.file("shape/nc.shp", package="sf"))
#st_combine is used to make a single polygon since nc is a multipolygon shapefile
nc_grid <- st_make_grid(st_combine(nc), n = 20)

ggplot() + geom_sf(data = st_union(nc)) + geom_sf(data =nc_grid, fill = NA) 


nc_grid_sf <- as_Spatial(nc_grid) %>% st_as_sf() %>% st_transform(st_crs(nc))

# Keep grid only within polygon
st_intersection(nc_grid, st_union(nc)) %>%
  ggplot() +
  geom_sf()
#> although coordinates are longitude/latitude, st_intersection assumes that they are planar

Создано в 2020-01 -15 при представлении пакета (v0.3.0)

...