es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Leyenda basada en la geometría en lugar de en la estética con ggplot.

La idea aquí es dibujar una leyenda para cada geom con la misma estética. En el ejemplo a continuación, la leyenda generada asume que estas dos capas diferentes están en la misma escala, lo que resulta en este mapa.

Quiero que, como resultado, la leyenda en el gráfico esté separada en dos, para poder cambiarlas con un scale_fill_* para cada capa.

Soy consciente de esta solución: https://stackoverflow.com/a/24874007/11056037, pero estoy buscando una forma más elegante y escalable de hacer esto.

library(tidyverse)
library(sf)
library(geobr)

mun <- map(11:12, read_municipality) %>%
    map(mutate, index = seq_along(code_muni), .before = geom)

mun[[2]] <- mun[[2]] %>%
    mutate(index = index + 100)

mun <- mun %>%
    map(
        ~mutate(.x, index = cut(index, quantile(index), include.lowest = TRUE))
    )

ggplot() +
    geom_sf(data = mun[[1]], aes(fill = index)) +
    geom_sf(data = mun[[2]], aes(fill = index))

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para separar la leyenda en el gráfico en dos capas, podemos agregar un argumento name único al mapeo aes de cada capa. Esto nos permite usar funciones separadas scale_fill_* para personalizar la leyenda de cada capa individualmente.

    Aquí tienes una versión actualizada del código:

    “`{r}
    library(tidyverse)
    library(sf)
    library(geobr)

    mun <- map(11:12, read_municipality) %>%
    map(mutate, index = seq_along(code_muni), .before = geom)

    mun[[2]] <- mun[[2]] %>%
    mutate(index = index + 100)

    mun <- mun %>%
    map(
    ~mutate(.x, index = cut(index, quantile(index), include.lowest = TRUE))
    )

    ggplot() +
    geom_sf(data = mun[[1]], aes(fill = index, name = “Capa 1”)) +
    geom_sf(data = mun[[2]], aes(fill = index, name = “Capa 2”)) +
    scale_fill_continuous(name = “Capa 1”, low = “blanco”, high = “azul”) +
    scale_fill_continuous(name = “Capa 2”, low = “blanco”, high = “rojo”)
    “`

    Este código utiliza el argumento name para asignar un nombre único al mapeo fill de cada capa. Luego agrega dos funciones scale_fill_continuous separadas, cada una con su propio nombre y colores personalizados. Esto resulta en un gráfico con dos leyendas separadas, una para cada capa.

    Espero que esto sea de ayuda. Avísame si tienes alguna otra pregunta.

Comments are closed.