Заполните цвета и ярлыки не правильно отображаться в Leaflet - PullRequest
0 голосов
/ 27 марта 2019

Я использую листовку (впервые), чтобы создать интерактивную версию результатов некоторых исследований. У меня проблема с тем, что цвета заливки и метки не отображаются правильно на шейп-файлы.

Я уверен, что ошибка где-то до меня, но после двух ночей я не могу понять, где. Ниже приведен пример использования упрощенного набора данных. Я загрузил данные 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 голосов
/ 29 марта 2019

Неправильная маркировка :
Я думаю, что ваша строка rownames(att) <- data$station %>% unique неверна (если вы посмотрите на att, вы увидите, что имена строк отличаются от значений station).
На мой взгляд, это должно быть: rownames(att) <- att$station.

Цвета :
при использовании colorFactor() он учитывает все уровни вашей переменной. Если вы посмотрите на уровни spDF$adminRegion, то увидите, что все исходные 14 уровней data$adminRegion все еще присутствуют.
У вас есть два решения:

  • сбросить неиспользуемые уровни и построить палитру, используя аргумент 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))

1-е решение дает вам те же цвета, что и ggplot2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...