Я пытаюсь повторить, используя ggplot2
, более ранний вопрос, который у меня возник, был leaflet . Я пытаюсь объединить две палитры, где одна используется, если моя переменная ниже определенного порога, и другая, если выше определенного порога. Как и в случае с моим leaflet
вопросом, мой окончательный сюжет кажется неправильным. Я также хочу преобразовать факторную легенду в непрерывную. Пример кода:
library(sf)
library(leaflet)
library(RColorBrewer)
# preparing the shapefile
nc <- st_read(system.file("gpkg/nc.gpkg", package="sf"), quiet = TRUE) %>%
st_transform(st_crs(4326)) %>%
st_cast('POLYGON')
# Create 108 categories
mutate(nc, category = ntile(PERIMETER, n = 108)) -> nc
x <- sum(nc$PERIMETER < 1.3)
x # number of values below threshold = 21
### Create an asymmetric color range
## Make vector of colors for values smaller than 1.3 (21 colors)
rc1 <- colorRampPalette(colors = c("#006837", "#1A9850"), space = "Lab")(x) #21
## Make vector of colors for values larger than 1.3
rc2 <- colorRampPalette(colors = c("#FDAE61", "#A50026"), space = "Lab")(length(nc$PERIMETER) - x)
## Combine the two color palettes
rampcols <- c(rc1, rc2)
mypal <- colorFactor(palette = rampcols, domain = nc$category)
previewColors(colorNumeric(palette = rampcols, domain = NULL), values = 1:length(nc$PERIMETER))
nc %>%
ggplot() +
geom_sf(aes(fill = factor(category))) +
scale_fill_manual(values = mypal(nc$category), guide = FALSE)
дает этот график:
но листовка (правильная окраска)
leaflet() %>%
addTiles() %>%
addPolygons(data = nc,
fillOpacity = 0.7,
fillColor = ~mypal(nc$category),
popup = paste("PERIMETER: ", nc$PERIMETER)) %>%
addLegend( pal = mypal, values = nc$category)
дает правильный график:
Вы видите, что цифра ggplot
не та, которую я не могу исправить.
Кроме того, когда я добавляю легенду к ggplot
, я получаю легенду фактора для новой палитры, но я хочу непрерывную (даже если переменная является фактором):
nc %>%
ggplot() +
geom_sf(aes(fill = factor(category))) +
scale_fill_manual(values = mypal(nc$category))
Кто-нибудь знает, как решить проблему окраски и изменить связанную легенду в непрерывной форме? Спасибо