在传单中填充颜色和标签未正确映射

时间:2019-03-26 21:03:24

标签: r leaflet polygon spatial sp

我正在使用传单(第一次)来创建一些研究成果的交互式版本。我遇到一个问题,即填充颜色和标签未正确映射到shapefile。

我确定某个地方的错误是由我造成的,但是两天后,我无法理解那里的错误。以下是使用简化数据集的示例。我已经上传了数据https://gofile.io/?c=DKvFwr

pacman::p_load(tidyverse, data.table, leaflet, sp, maps, leaflet.extras, htmltools, rgdal)


# Load data
data = readRDS("exampleData.RDS")
data %>% str


# Create spatial polygons dataframe
spPolys = data %>%
  group_by(station) %>%
  do(poly=select(., long, lat) %>% Polygon()) %>%
  rowwise() %>%
  do(polys=Polygons(list(.$poly),.$station)) %>%
  {SpatialPolygons(.$polys)}

att = data %>% group_by(station) %>% slice(1) %>% select(station, adminRegion, nestedLevel, river, location, area_km2, type) %>% as.data.frame
rownames(att) <- data$station %>% unique

spDF = SpatialPolygonsDataFrame(spPolys, data = att)
spDF@data


# Mapping
n = length(unique(spDF$adminRegion))
factorPal <- colorFactor(viridis::viridis(n), spDF$adminRegion)

spDF %>%
  leaflet() %>%

  addProviderTiles(provider = providers$Esri.WorldGrayCanvas) %>%

  addPolygons(stroke = FALSE, smoothFactor = 0.2, 
              fillOpacity = 1.0, fillColor = ~factorPal(adminRegion), 
              label = ~adminRegion) %>%

  addLegend(pal = factorPal, values = ~adminRegion, 
            opacity = 1.0, title = NULL,
            position = "bottomright")

enter image description here

1 个答案:

答案 0 :(得分:0)

标签不正确
我认为您的行rownames(att) <- data$station %>% unique是不正确的(如果看一下att,您会发现行名与station的值不同)。
我认为应该是:rownames(att) <- att$station

颜色
使用colorFactor()时,它将考虑变量的所有级别。如果查看spDF$adminRegion的级别,可以看到data$adminRegion的所有原始14个级别仍然存在。
您有两种解决方案:

  • 删除未使用的级别,并使用domain自变量构建调色板(如您所做的那样):
    spDF$adminRegion <- fct_drop(spDF$adminRegion) factorPal <- colorFactor(viridis::viridis(n), domain = spDF$adminRegion)

  • 使用levels参数构建调色板,仅保留使用的级别:
    factorPal <- colorFactor(viridis::viridis(n), levels = unique(spDF$adminRegion))

第一种解决方案为您提供与ggplot2完全相同的颜色。