我的主要目标是将多个空间多边形组合成一个地图,然后根据变量的级别对它们进行着色。
为此,我首先清理并聚合GADM数据:
france <- getData("GADM", country = "FRA", level = 5)
接下来,我将几个区域合并为:
Normandie_names <- c("Basse-Normandie", "Haute-Normandie")
Normandie_index <- which(france$NAME_1 %in% Normandie_names)
regionOfInterest_Normandie <- gUnionCascaded(france[Normandie_index, ])
Normandie <- regionOfInterest_Normandie %>% geometry
Normandie <- sapply(Normandie@polygons, slot, "area") %>%
{which(. == max(.))} %>% Normandie[.]
Normandie$Name <- "Normandie"
2)第二个区域以相同的方式:
Bourgogne_Franche_Comte_names <- c("Bourgogne", "Franche-Comté")
Bourgogne_Franche_Comte_index <- which(france$NAME_1 %in%
Bourgogne_Franche_Comte_names)
regionOfInterest_Bourgogne_Franche_Comte <-
gUnionCascaded(france[Bourgogne_Franche_Comte_index, ])
Bourgogne_Franche_Comte<-regionOfInterest_Bourgogne_Franche_Comte%>% geometry
Bourgogne_Franche_Comte<- sapply(Bourgogne_Franche_Comte@polygons, slot, "area") %>%
{which(. == max(.))} %>% Bourgogne_Franche_Comte[.]
Bourgogne_Franche_Comte$Name <- "Bourgogne_Franche_Comte"
现在,我有2个空间多边形,但我想根据外部值为它们着色: 假设Bourgogne_Franche_Comte值为100,Normandie值为30。 我想用相同颜色但不同级别(即深色或亮绿色)为地图着色。
首先我想合并两个空间多边形:
joined <- union(Normandie, Bourgogne_Franche_Comte)
然后可能使用绘图功能,但
plot(joined, col = joined$Value)
重点在于想要控制颜色和颜色的级别 - 取决于值。
这是帮助!!答案 0 :(得分:0)
您可以直接在spatialpolygon对象上使用which
来简化选择区域的方式
例如:
Normandie_names <- c("Basse-Normandie", "Haute-Normandie")
Normandie <- france[which(france$NAME_1 %in% Normandie_names),]
您可以使用rbind
组合两个多边形:
joined <- rbind(Normandie, Bourgogne_Franche_Comte)
使用SpatialPolygonsDataFrame
,您可以将外部数据添加到多边形。
您可以使用heat.colors
之类的调色板根据您的值为多边形着色
因此,完整的脚本将如下所示:
library(sp)
library(rgdal)
library(raster)
library(rgeos)
library(dplyr)
library(ggplot2)
# Load data
france <- getData("GADM", country = "FRA", level = 5)
# Select features ---------------
# Select Normandie
Normandie_names <- c("Basse-Normandie", "Haute-Normandie")
Normandie <- france[which(france$NAME_1 %in% Normandie_names),]
Normandie.sp.tmp <- gUnaryUnion(Normandie)
# Add external data to Normandie
Normandie.sp <- SpatialPolygonsDataFrame(
Normandie.sp.tmp,
data = data.frame(region = "Normandie", value = 30))
# Select Bourgogne
Bourgogne_Franche_Comte_names <- c("Bourgogne", "Franche-Comté")
Bourgogne <- france[which(france$NAME_1 %in% Bourgogne_Franche_Comte_names),]
Bourgogne.sp.tmp <- gUnaryUnion(Bourgogne)
# Add external data to Bourgogne
Bourgogne.sp <- SpatialPolygonsDataFrame(
Bourgogne.sp.tmp,
data = data.frame(region = "Bourgogne_Franche_Comte", value = 100))
# Merge both polygons with their data
Regions.sp <- rbind(Normandie.sp, Bourgogne.sp)
plot(Regions.sp, col = rev(heat.colors(50))[Regions.sp$value/2])
我建议将gUnaryUnion
与向量一起使用,指定哪些多边形只合并一次。然后,您可以添加外部数据。
# Create vector to define which regions will be united
Union.vector <- rep(0, length(france))
Union.vector[which(france$NAME_1 %in% Normandie_names)] <- 1
Union.vector[which(france$NAME_1 %in% Bourgogne_Franche_Comte_names)] <- 2
# Unite regions
Region.union.sp <- gUnaryUnion(france, id = Union.vector)
# Add external dataset
Region.union.sp.data <- SpatialPolygonsDataFrame(
Region.union.sp,
data = data.frame(
value = c(0, 30, 100),
region = c("all", "Normandie", "Bourgogne_Franche_Comte")),
match.ID = FALSE)
plot(Region.union.sp.data,
col = rev(heat.colors(51))[1 + Region.union.sp.data$value/2])