【问题标题】:Coloring Spatial polygons by Different Levels in R在 R 中按不同级别为空间多边形着色
【发布时间】:2017-08-21 06:34:35
【问题描述】:

我的主要目标是将几个空间多边形组合成一张地图,然后根据变量的级别为它们着色。

为此,我首先清理和汇总 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)

关键是要控制颜色和颜色的级别 - 取决于值。

感谢帮助!!

【问题讨论】:

  • 请提供一个可重现的例子。我知道 GADM 是一个广泛使用的数据集,但如果您可以通过提供一些现成的代码来获取与您正在使用的数据相同的数据,或者创建一个玩具,让我们更容易帮助您,那就太好了使用从头开始创建的 shapefile 示例来说明问题。

标签: r spatial sp


【解决方案1】:

您的方式,简化

在空间多边形对象上直接使用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])

【讨论】:

    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2013-03-11
    • 1970-01-01
    相关资源
    最近更新 更多