Используя R и Leaflet, как я могу заставить мою карту отображать числа, отформатированные запятыми? - PullRequest
1 голос
/ 25 марта 2020

Вот данные для воспроизведения выборки округов, используемых на моей карте:

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"), num.parcels = c(27797L, 
452890L, 6432L)), row.names = c(NA, -3L), class = "data.frame")

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

Вот код для создания моей карты:

bins <- c(1, 10000, 50000, 100000, 500000, 600000)
pal <- colorBin("Blues", domain = parcels$num.parcels, bins = bins)

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")

В результате получается листовка, где при наведении курсора на графство отображается количество посылок для этого округа. Я хотел бы, чтобы эти числа были отформатированы запятыми, например, «6432» вместо «6432».

Я пробовал несколько решений. Сначала я попытался изменить оператор sprintf, который определяет метки, чтобы увидеть, есть ли способ получить числа, отформатированные запятыми. Во-вторых, он попытался запустить:

parcels$num.parcels <- format(parcels$num.parcels, big.mark = ',')

Это позже вызывает проблемы при запуске кода листовки, потому что переменная больше не числительная c. В-третьих, я попытался выяснить, есть ли способ сделать это непосредственно в операторе labelOptions, но не смог найти никакого способа сделать это.

1 Ответ

0 голосов
/ 25 марта 2020

Используя пакет scales, этого можно достичь примерно так:

labels <- sprintf(
  "<strong>%s County</strong><br/>
  Parcels: %s<br/>",
  parcels$county, scales::number_format(big.mark = ",")(parcels$num.parcels)
) %>% lapply(htmltools::HTML)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...