【问题标题】:Legend based on geom rather than aesthetic with ggplot基于几何而不是美学的图例与ggplot
【发布时间】:2021-12-04 00:06:01
【问题描述】:

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

因此,我希望图表中的图例被分成两部分,因此我可以为每一层使用 scale_fill_* 更改它们。

我知道这个解决方案:https://stackoverflow.com/a/24874007/11056037,但我正在寻找一种更优雅和可扩展的方式来做到这一点。

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

谢谢。

【问题讨论】:

  • 不仅仅是语义,并且为了阐明图形的语法(ggplot 中的 gg 位)——图例将始终映射到美学,即映射到几何图形的“外观”。
  • 这能回答你的问题吗? Legends for multiple fills in ggplot
  • 不,但 stefan 的回答解决了问题。谢谢!

标签: r ggplot2 maps


【解决方案1】:

听起来好像您正在寻找 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)

【讨论】:

  • 正是这个!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多