Есть ли способ условно варьировать непрозрачность полигонов с помощью Leaflet? - PullRequest
1 голос
/ 14 июля 2020

Я использую пакет буклетов R для построения данных по округам Калифорнии. Я хочу, чтобы многоугольники в каждом округе отличались непрозрачностью в зависимости от количества участков в этом округе. Округа с большим количеством участков должны быть более непрозрачными, а округа с меньшим количеством участков должны быть более прозрачными. Возможно ли это?

Я попытался изменить параметр fillOpacity, аналогично тому, как fillColor зависит от количества участков:

fillOpacity = ~num.parcels

Пример моих данных:

packages <- c('dplyr','leaflet','sf','USAboundaries')
lapply(packages, library, character.only = TRUE)

ca_counties <- USAboundaries::us_counties(states = 'CA')

parcels <- structure(list(county = c("Yuba", "Sacramento", "Inyo", "Los Angeles", "Sierra"), 
                          num.parcels = c(27797L, 452890L, 6432L, 15830L, 54291L)), row.names = c(NA, -5L), class = "data.frame")

parcels <- st_as_sf(left_join(parcels, ca_counties[,c('name')], by = c("county" = "name")))

Листовка-карта:

labels <- sprintf(
  "<strong>%s County</strong><br/>
  Parcels: %g<br/>",
  parcels$county, parcels$num.parcels
) %>% lapply(htmltools::HTML)

leaflet(parcels) %>%
  setView(-119, 37.9, 6) %>%
  addTiles() %>%
  addPolygons(
    fillColor = ~pal(num.parcels),
    weight = 2,
    opacity = 1,
    color = 'black',
    dashArray = '2',
    fillOpacity = 0.7,
    highlightOptions = highlightOptions(color = "red", weight = 3,
                                        bringToFront = TRUE),
    label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "4px 8px"),
      textsize = "15px",
      direction = 'auto')) %>%
  addLegend(pal = pal, values = ~num.parcels, opacity = 0.7, title = "Number of Parcels",
            position = "bottomleft")

1 Ответ

1 голос
/ 14 июля 2020

попробуйте установить fillOpacity = ~num.parcels / max(num.parcels),

Я также включил pal-функцию .. похоже, что она отсутствует в вашем коде ..

# Create a continuous palette function
pal <- colorNumeric( palette = "Reds", domain = parcels$num.parcels )

#calculate fillopacity

labels <- sprintf(
  "<strong>%s County</strong><br/>
  Parcels: %g<br/>",
  parcels$county, parcels$num.parcels
) %>% lapply(htmltools::HTML)

leaflet(parcels) %>%
  setView(-119, 37.9, 6) %>%
  addTiles() %>%
  addPolygons(
    fillColor = ~pal(num.parcels),
    weight = 2,
    opacity = 1,
    color = 'black',
    dashArray = '2',
    fillOpacity = ~num.parcels / max(num.parcels),
    highlightOptions = highlightOptions(color = "red", weight = 3,
                                        bringToFront = TRUE),
    label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "4px 8px"),
      textsize = "15px",
      direction = 'auto')) %>%
  addLegend(pal = pal, values = ~num.parcels, opacity = 1, title = "Number of Parcels",
            position = "bottomleft")

введите описание изображения здесь

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