基于 geom 而不是 ggplot 美学的图例

Legend based on geom rather than aesthetic with ggplot

这里的想法是用同样的审美为每个geom画一个图例。在下面的示例中,生成的图例假设这两个不同的层具有相同的比例,从而产生了这张地图。

因此,我希望图表中的图例一分为二,因此我可以为每一层更改 scale_fill_*

我知道这个解决方案:,但我正在寻找一种更优雅和可扩展的方法来做到这一点。

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

谢谢。

听起来好像您正在寻找 ggnewscale 包,它允许多个尺度和指南以实现相同的审美:

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

pal1 <- scales::hue_pal()(8)[1:4]
pal2 <- scales::hue_pal()(8)[5:8]

ggplot() +
  geom_sf(data = mun[[1]], aes(fill = index)) +
  scale_fill_manual(values = pal1) +
  new_scale_fill() +
  geom_sf(data = mun[[2]], aes(fill = index)) +
  scale_fill_manual(values = pal2)