Как установить неравномерную последовательность легенд в mapview? - PullRequest
0 голосов
/ 26 января 2020

Следующий код создает легенду с четными перерывами. Как я могу изменить его так, чтобы каждое значение от 0 до 1 отображалось белым цветом, а значения от 1-максимального значения показывались с перерывами 0,5, отображаемыми с градуированными оттенками? (Другими словами, единственным изменением карты ниже будет то, что все значения 0-1 показаны белым цветом).

Вид карты не распознает breaks. Единственное другое решение, которое я могу придумать, - это разделить данные и создать две карты, одну из значений SHAPE_LEN от 0-1 и вторую из значений SHAPE_LEN от 1-3,98, и отобразить обе карты вместе. Это нежелательное решение, потому что мне нужно отобразить две легенды.

Спасибо, ТАК!

library(leaflet)
library(mapview)
pink2 = colorRampPalette(c('white', 'deeppink'))

mapview(franconia, alpha.regions = 1, map.types = 'CartoDB.Positron',
    layer.name = 'Franconia', zcol = 'SHAPE_LEN',
    col.regions = pink2, at = seq(0, 4, .05))

enter image description here

1 Ответ

2 голосов
/ 28 января 2020

Если вы не возражаете против использования пакета листовки, а не пакета mapview, вы можете воспользоваться следующим подходом. Что вам нужно, это создавать собственные цвета с помощью colorRampPalette. По-вашему, вы просто интерполировали цветовое пространство между двумя цветами. Вы можете указать, сколько цветов вы хотите создать. Здесь я создал два цветовых пространства. Первый предназначен только для белого, а второй - для цветового пространства между белым и deeppink2. Я объединил эти два цветовых вектора и создал rampcols. Я создал цвета для листовки с этим. Наконец, я нарисовал карту для вас. Я не знаком с mawview. Но если вы можете использовать тот же подход, это может быть лучшим сценарием для вас. В противном случае этого достаточно для продолжения вашего проекта.

library(mapview)
library(leaflet)

# Make vector of colors for values between 0 and 1 (10 colors)
# You may have to change the number of colors depending on your situation.

rc1 <- colorRampPalette(colors = c("white", "white"), space = "Lab")(10)

# Make vector of colors for values between 1 and 4 (30 colors)
# You may have to change the number of colors depending on your situation.

rc2 <- colorRampPalette(colors = c("white", "deeppink2"), space = "Lab")(30)

# Combine the two color palettes
rampcols <- c(rc1, rc2)

mypal <- colorNumeric(palette = rampcols, domain = franconia$SHAPE_LEN

# Draw a map
leaflet() %>% 
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = franconia, group = "Franconia",
            stroke = FALSE, smoothFactor = 0.2, fillOpacity = 1,
            fillColor = ~mypal(franconia$SHAPE_LEN),
            popup = paste("Region: ", franconia$NAME_ASCI, "<br>",
                          "Value: ", franconia$SHAPE_LEN, "<br>")) %>%
addLayersControl(overlayGroups = "Franconia") %>%
addLegend(position = "bottomright", pal = mypal, values = franconia$SHAPE_LEN,
          title = "Franconia",
          opacity = 1)

enter image description here

...