:hi NonText guifg=bg
Эта команда должна установить цвет нетекстовых символов таким же, как цвет фона.
Я думаю, что проблема не в unionSpatialPolygons
, а в вашем сюжете. В частности, для каждого идентификатора вы создаете только первый «подполигон» . Выполните следующее, чтобы проверить, что пошло не так:
for(i in 1:length(names(usaUnion))){
print(length(usaUnion@polygons[[i]]@Polygons))
}
Для каждого из них вы взяли только первый.
Я получил правильное объединение / участок многоугольника со следующим кодом :
library(rgdal)
library(maptools)
library(plyr)
usa <- readOGR(dsn = "INSERT_YOUR_PATH", layer="light_shape")
# remove NAs
usa <- usa[!is.na(usa$segment_ID), ]
usaIDs <- usa$segment_ID
#get unique colors
set.seed(666)
unique_colors <- sample(grDevices::colors()[grep('gr(a|e)y|white', grDevices::colors(), invert = T)], 15)
colors <- plyr::mapvalues(
usaIDs,
from = as.numeric(sort(as.character(unique(usaIDs)))), #workaround to get correct color order
to = unique_colors
)
plot(usa, col = colors, main = "Original Map")
usaUnion <- unionSpatialPolygons(usa, usaIDs)
plot(usaUnion, col = unique_colors, main = "Joined Polygons")
Вот пример, использующий sf
, чтобы сделать этот график, в котором подчеркивается, как способность пакета работать с dplyr
и summarise
в частности может сделать эту операцию чрезвычайно выразительной и кратким. I filter
вывести отсутствующие идентификаторы, group_by
идентификатор, summarise
(который делает объединение по умолчанию) и легко построить график с помощью geom_sf
.
library(tidyverse)
library(sf)
# Substitute wherever you are reading the file from
light_shape <- read_sf(here::here("data", "light_shape.shp"))
light_shape %>%
filter(!is.na(segment_ID)) %>%
group_by(segment_ID) %>%
summarise() %>%
ggplot() +
geom_sf(aes(fill = factor(segment_ID)))